call メソッド
オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。
thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。
一見すると混乱しやすいので、簡単に説明します。
obj1.method1.call(obj2,argument1,argument2)
上記のように、call の機能はメソッドを配置することです。 obj1 のそれを obj2 で使用し、次の argument1.. がパラメータとして渡されます。
具体的な例を挙げてください
function add(a,b) { alert(a+b); } function sub(a,b) { alert(a-b); } add.call(sub,3,1);
この例の意味は、sub を add に置き換えること、add.call(sub,3,1) == add(3,1) ということです。実行結果は次のようになります:alert(4); // 注: js の関数は実際にはオブジェクトであり、関数名は Function オブジェクトへの参照です。
もう少し複雑な例を見てみましょう
function Class1() { this.name = "class1"; this.showNam = function() { alert(this.name); } } function Class2() { this.name = "class2"; } var c1 = new Class1(); var c2 = new Class2(); c1.showNam.call(c2)
call は、実行のために c1 のメソッドを c2 に置くことを意味することに注意してください。元々、c2 には showNam() メソッドがありませんでした。 c1 の showNam() メソッド。このメソッドは実行のために c2 に配置されるため、this.name は class2 である必要があり、実行結果は次のようになります:alert ("class2");
どう思いますか、興味深いですね。オブジェクト a にオブジェクト b のメソッドを実行させることができますが、これは Java プログラマが思いつかないことです。さらに興味深いのは、call を使用して継承
#
function Class1(){ this.showTxt = function(txt) { alert(txt); } } function Class2() { Class1.call(this); } var c2 = new Class2(); c2.showTxt("cc");
function Class10() { this.showSub = function(a,b) { alert(a-b); } } function Class11() { this.showAdd = function(a,b) { alert(a+b); } } function Class2() { Class10.call(this); Class11.call(this); }
もちろん、プロトタイプ チェーンの使用など、JS 継承の他の方法もありますが、これはここでは扱いません。この 2 つのメソッドは基本的に同じことを意味します。
違いは、call の 2 番目のパラメータは任意の型にできるのに対し、call の 2 番目のパラメータは任意の型にできることです。 apply の 2 番目のパラメータは Array である必要があります
推奨チュートリアル: "
以上がjs呼び出しの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。