Function.prototype.call()
関数インスタンスの call メソッドは、関数内で this のポインタ (つまり、関数が実行されるスコープ) を指定し、その関数を指定されたスコープ。そして関数はすぐに実行されます。
この一節をよりよく理解するために例を見てください。
var keith = { rascal: 123 }; var rascal = 456; function a() { console.log(this.rascal); } a(); //456 a.call(); //456 a.call(null); //456 a.call(undefined); //456 a.call(this); //456 a.call(keith); //123
上記のコードでは、関数の this キーワードがグローバル オブジェクトを指している場合、戻り結果は 456 です。 call メソッドにパラメーターがない場合、またはパラメーターが null または未定義である場合、またはこれがグローバル オブジェクトを指すことと同等であることがわかります。 call メソッドを使用して this キーワードを keith オブジェクトにポイントする場合、つまり、関数が実行されるスコープが keith オブジェクトである場合、戻り結果は 123 です。
call() メソッドは 2 つのパラメータを渡すことができます。最初のパラメータは関数内の this のポインタ (つまり、関数が実行されるスコープ) を指定し、2 番目のパラメータは関数の呼び出し時に渡す必要があるパラメータです。
function keith(a, b) { console.log(a + b); } keith.call(null, 1, 2); //3
最初のパラメータは必須で、null、未定義、this を指定できますが、空にすることはできません。 null (未定義) に設定すると、関数 keith が現時点でグローバル スコープ内にあることを示します。 2 番目のパラメータは 1 つずつ追加する必要があります。適用時は配列形式で追加する必要があります。
call メソッドの応用の 1 つは、オブジェクトのネイティブ メソッドを呼び出すことです。配列のようなオブジェクトを配列に変換するためにも使用できます。
var obj = {}; console.log(obj.hasOwnProperty('toString')); //false obj.hasOwnProperty = function() { return true; } console.log(obj.hasOwnProperty('toString')); //true console.log(Object.prototype.hasOwnProperty.call(obj, 'toString')); //false
上記コードにおいて、hasOwnPropertyはobjオブジェクトが継承したメソッドです。このメソッドをオーバーライドすると正しい結果が得られません。 call メソッドはこの問題を解決できます。このメソッドは、obj オブジェクトに hasOwnProperty メソッドの元の定義を配置して実行するため、obj に同じ名前のメソッドが存在するかどうかに関係なく、結果に影響を与えません。なお、hasOwnPropertyはObject.prototypeのネイティブオブジェクトのメソッドであり、callはFunction.prototypeから継承したメソッドである。
以上がJavascriptでの関数呼び出しメソッドインスタンスの使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。