1。メソッド定義
通話方法:
構文:call([thisobj [、arg1 [、arg2]]]]]])
定義:オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。
説明:
コールメソッドは、別のオブジェクトの代わりにメソッドを呼び出すために使用できます。呼び出しメソッドは、関数のオブジェクトコンテキストを初期コンテキストからthisOBJによって指定された新しいオブジェクトに変更します。
thisOBJパラメーターが提供されていない場合、グローバルオブジェクトはthatoBJとして使用されます。
適用方法:
構文:apply([thisobj [、argarray]])
定義:特定のオブジェクトの1つの方法を適用し、現在のオブジェクトを別のオブジェクトに置き換えます。
説明:
ArgArrayが有効な配列ではない場合、または引数オブジェクトではない場合、TypeRrorが生成されます。
引数が提供されていない場合、グローバルオブジェクトはthisOBJとして使用され、引数を渡すことはできません。
2。一般的な例
a。
コードコピーは次のとおりです。
関数追加(a、b)
{
アラート(a+b);
}
関数サブ(a、b)
{
アラート(ab);
}
add.call(sub、3,1);
この例の意味は、subをadd、add.call(sub、3,1)== add(3,1)に置き換えることです。したがって、実行結果は次のとおりです。 //注:JSの関数は実際にはオブジェクトであり、関数名は関数オブジェクトへの参照です。
b。
コードコピーは次のとおりです。
function animal(){
this.name = "animal";
this.showname = function(){
アラート(this.name);
}
}
function cat(){
this.name = "cat";
}
var Animal = new Animal();
var cat = new Cat();
//呼び出しまたは適用方法を介して、元々動物オブジェクトに属するshowname()メソッドは、使用するためにオブジェクト猫に引き渡されます。
//入力結果は「猫」です
Animal.showname.call(cat、 "、");
//animal.showname.apply(cat、[]);
コールとは、動物法を猫に実行して実行することを意味します。猫にはshowname()メソッドがないことがわかりました。さて、猫に動物showname()方法を実行するようにするので、これは猫である必要があります
c。継承を実現します
コードコピーは次のとおりです。
function animal(name){
this.name = name;
this.showname = function(){
アラート(this.name);
}
}
function cat(name){
animal.call(this、name);
}
var cat = new Cat( "Black Cat");
cat.showname();
Animal.call(これ)は、このオブジェクトの代わりに動物オブジェクトを使用することを意味します。それでは、猫には動物のすべての特性と方法がありませんか? CATオブジェクトは、動物の方法と特性を直接呼び出すことができます。
d。複数の継承
コードコピーは次のとおりです。
function class10()
{
this.showsub = function(a、b)
{
アラート(ab);
}
}
function class11()
{
this.showadd = function(a、b)
{
アラート(a+b);
}
}
function class2()
{
class10.call(this);
class11.call(this);
}
複数の相続財産を達成するために2つの呼び出しを使用して非常に簡単です
もちろん、この記事の範囲に分類されないプロトタイプチェーンの使用など、JSを継承する他の方法がありますが、ここでの通話の使用についてのみ説明します。コールといえば、もちろん適用されます。これらの2つの方法は基本的に同じことを意味します。違いは、コールの2番目のパラメーターは任意のタイプである可能性があり、適用の2番目のパラメーターは配列または引数でなければならないことです
そして、カリー、発信者。