1. メソッドの定義
呼び出しメソッド:
構文: call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定義: オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。
説明:
call メソッドを使用すると、別のオブジェクトに代わってメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。
thisObj パラメータが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。
適用方法:
構文: apply([thisObj[,argArray]])
定義: オブジェクトのメソッドを適用して、現在のオブジェクトを別のオブジェクトに置き換えます。
説明:
argArray が有効な配列でない場合、または引数オブジェクトではない場合、TypeError が発生します。
argArray も thisObj も指定されていない場合は、Global オブジェクトが thisObj として使用され、パラメータを渡すことはできません。
2. 一般的な例
あ、
関数 add(a,b)
{
アラート(a b);
}
関数 sub(a,b)
{
アラート(a-b)
}
add.call(sub,3,1);
この例の意味は、sub を add、add.call(sub,3,1) == add(3,1) に置き換えることです。したがって、実行結果は次のようになります。関数は実際にはオブジェクトであり、関数名は Function オブジェクトへの参照です。
b、
function Animal(){
This.name = "動物"
This.showName = function(){
アラート(この名前);
}
}
関数 Cat(){
This.name = "猫"
}
var 動物 = 新しい動物();
var cat = 新しい Cat();
//call または apply メソッドを通じて、もともと Animal オブジェクトに属していた showName() メソッドが、使用するためにオブジェクト cat に渡されます。
//入力結果は「猫」です
動物.showName.call(猫,",");
//animal.showName.apply(cat,[]);
呼び出しは、animal のメソッドを cat に置いて実行することを意味します。元々、cat には showName() メソッドがありませんでしたが、現在は、animal の showName() メソッドが実行のために cat に置かれているため、this.name は Cat
になります。
c. 継承を実装する
コードをコピーします
コードは次のとおりです:
関数 Cat(名前){
Animal.call(これ、名前);
}
var cat = new Cat("黒猫");
cat.showName();
Animal.call(this) は、このオブジェクトの代わりに Animal オブジェクトを使用することを意味します。 それでは、Cat オブジェクトは、Animal のメソッドとプロパティを直接呼び出すことができるのではないでしょうか。
d. 多重継承
コードをコピー
コードは次のとおりです:
関数 Class10()
{
This.showSub = function(a,b)
{
アラート(a-b)
}
}
関数 Class11()
{
This.showAdd = function(a,b)
{
アラート(a b);
}
}
関数 Class2()
{
Class10.call(this);
Class11.call(this);
}
非常に簡単です。2 つの呼び出しを使用して多重継承を実現します
もちろん、プロトタイプ チェーンを使用するなど、js を継承する他の方法もあります。これはこの記事の範囲外です。ここでは call の使用法についてのみ説明します。 call と apply について言えば、これら 2 つのメソッドは基本的に同じことを意味します。違いは、call の 2 番目のパラメーターは任意の型にできるのに対し、apply の 2 番目のパラメーターは配列または引数である必要があることです。 🎜>
そして、着信者、発信者..