Function.prototype.apply()
apply メソッドも call メソッドと同様に、this のポイント (関数が実行されるスコープ) を変更し、指定されたスコープで関数を呼び出します。この関数もすぐに実行されます。唯一の違いは、関数の実行時に配列をパラメーターとして受け取ることです。
apply メソッドの最初のパラメータは、this が指すオブジェクトでもあり、null または unknown または this に設定されている場合、グローバル オブジェクトを指定するのと同じです。 2 番目のパラメーターは配列であり、配列のすべてのメンバーが順番にパラメーターとして使用され、呼び出し時に元の関数に渡されます。元の関数のパラメータはcallメソッドでは一つずつ追加する必要がありますが、applyメソッドでは配列形式で追加する必要があります。
通話のニュアンスを確認して応募してください。
function keith(a, b) { console.log(a + b); } keith.call(null, 2, 3); //5 keith.apply(null, [2, 3]); //5
上記のコードでは、最初のパラメーターは null で、グローバル スコープを指し、2 番目のパラメーターは少し異なる形式で渡されます。
applyメソッドには以下の用途があります。
3.1: 配列内の最大値を見つける
var a = [2, 4, 5, 7, 8, 10]; console.log(Math.max.apply(null, a)); //10 console.log(Math.max.call(null,2, 4, 5, 7, 8, 10)); //10
Javascript には、配列内の最大値を見つけるメソッドが提供されていません。Function.prototype から継承した apply メソッドと Math.max メソッドを使用してそれを取得します。 . 配列の最大値を返すことができます。
3.2: 配列の空の要素を未定義に変更します
apply メソッドを使用し、Array コンストラクターを使用して、配列の空の要素を未定義に変更します。
console.log(Array.apply(null, [1, , 3])); // [1, undefined, 3]
空の要素と未定義の違いは、配列の forEach メソッドは空の要素をスキップしますが、未定義と null はスキップしないことです。したがって、内部要素をトラバースすると、異なる結果が得られます。
var a = [1, , 3]; a.forEach(function(index) { console.log(index); //1,3 ,跳过了空元素。 }) Array.apply(null,a).forEach(function(index){ console.log(index); ////1,undefined,3 ,将空元素设置为undefined })
3.3: 配列のようなオブジェクトを変換する
また、配列オブジェクトのスライスメソッドを使用して、配列のようなオブジェクト(引数オブジェクトなど)を実数の配列に変換することができます。もちろん、スライス メソッドの重要な用途は、配列のようなオブジェクトを実際の配列に変換することです。 call と apply の両方がこのアプリケーションを実装できます。
console.log(Array.prototype.slice.apply({0:1,length:1})); //[1] console.log(Array.prototype.slice.call({0:1,length:1})); //[1] console.log(Array.prototype.slice.apply({0:1,length:2})); //[1,undefined] console.log(Array.prototype.slice.call({0:1,length:2})); //[1,undefined] function keith(a,b,c){ return arguments; } console.log(Array.prototype.slice.call(keith(2,3,4))); //[2,3,4]
上記のコードの call メソッドと apply メソッドのパラメータはすべてオブジェクトですが、返される結果はすべて配列であり、オブジェクトを配列に変換する目的を果たしています。上記のコードからわかるように、このメソッドが機能する前提は、処理されるオブジェクトに長さ属性と対応する数値キーが必要であることです。
以上がJavascriptの関数applyメソッドの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。