ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript呼び出しメソッドの使い方_基礎知識

JavaScript呼び出しメソッドの使い方_基礎知識

WBOY
WBOYオリジナル
2016-05-16 18:36:59905ブラウズ

まずは公式の説明を見てみましょう:
call メソッド
を参照してください
適用対象: 関数オブジェクト
必須
バージョン 5.5
オブジェクトのメソッドを呼び出して、現在のオブジェクトと別のオブジェクトオブジェクト。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。
thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。
一見すると混乱しやすいので、最初に簡単に説明します。
obj1.method1.call(obj2,argument1,argument2)
上記のように、call の機能はobj1 のメソッド obj2 で使用し、次の argument1.. をパラメータとして渡します。
具体的な例を示します

コードをコピーします コードは次のとおりです:

関数add(a ,b)
{
alert(a b);
関数 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 に実行することを意味することに注意してください。 c1 の showNam() メソッドを配置することです。 ) メソッドは実行のために c2 に配置されるため、this.name は class2 になるはずで、実行結果は次のようになります。興味深いことに、オブジェクト a にオブジェクト b のメソッドを実行させることができます。これは Java プログラマが思いつかないことです。さらに興味深いのは、呼び出しを使用して継承を実装できることです。



コードをコピーします

コードは次のとおりです。 関数 Class1() { this.showTxt = function(txt) {
alert(txt);
}
}
関数 Class2()
{
Class1.call(this);
var c2 = new Class2()


このように、Class2 は Class1 を継承します。Class1.call(this) は、このオブジェクトの代わりに Class1 オブジェクトを使用することを意味します。その場合、Class2 は Class1 のすべてのプロパティとメソッドを持たず、c2 オブジェクトは Class1 のメソッドとプロパティを直接呼び出すことができます。実行結果は次のとおりです:alert ("cc");
はい、これで JavaScript がオブジェクト指向で継承をシミュレートし、多重継承を実装することもできます。




コードをコピー


コードは次のとおりです。
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);
}


これは非常に簡単で、2 つの呼び出しを使用して多重継承を実現します
もちろん、プロトタイプ チェーンを使用するなど、js を継承する他の方法もあります。 、これは属しません この記事の範囲は、call の使用法を説明することだけです
call について言及しましたが、もちろんこれら 2 つのメソッドは基本的に同じことを意味します
違いは、call の 2 番目のパラメータであることです。 apply の場合は、任意の型を指定できます。2 番目のパラメータは配列である必要があります。または、引数
と callee、caller を指定することもできます。これについては、次回説明します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。