ホームページ  >  記事  >  ウェブフロントエンド  >  Javascriptの関数applyメソッドの使い方を詳しく解説

Javascriptの関数applyメソッドの使い方を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-20 14:10:092261ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。