Javascriptでの関数呼び出しメソッドインスタンスの使い方を詳しく解説

伊谢尔伦
リリース: 2017-07-20 14:07:26
オリジナル
4021 人が閲覧しました

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート