1. call call メソッド
オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。
thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。
簡単な例 (関数呼び出し):
関数 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); 複雑な例 (メソッド呼び出し):
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 には showNam.() メソッドがないので、実行のために c1 の showNam() メソッドを c2 に配置します。そのため、this.name は class2 になり、実行結果は次のようになります。 >継承の実装
{
this.showTxt = function(txt )
{
alert(txt);
}
}
function Class2()
{
Class1.call (this);
}
var c2 = new Class2();
このように、Class2 は Class1 を継承します。 call(this) は、このオブジェクトの代わりに Class1 オブジェクトを使用することを意味します。 では、Class2 には Class1 のメソッドとメソッドがすべて含まれているのではないでしょうか? 実行結果は次のようになります。 cc”);
はい、これです。これは、JavaScript がオブジェクト指向で継承をシミュレートする方法であり、多重継承も実装できます。
多重継承
コードをコピー
this.showSub = function(a,b)
{
alert(a-b);
}
}
関数 Class11()
{
this.showAdd = function(a,b)
{
alert(a b)
}
}
function Class2()
{
Class10.call(this);
Class11.call(this);
}
2 つの呼び出しを使用して多重継承を実現します
もちろん, js プロトタイプチェーンを使用するなど、他の方法もあります。これはこの記事の範囲外です。ここでは call の使用方法について説明します。
もちろん、これら 2 つの方法が基本的に適用されます。同じことを意味します
違い call の 2 番目のパラメータは任意の型にすることができますが、apply の 2 番目のパラメータは配列
2 でなければなりません。 > apply と call の両方で 関数は同じですが、パラメーターが異なります。
最初のパラメータは同じ意味ですが、2 番目のパラメータについては、
apply はパラメータ配列に渡されます。つまり、複数のパラメータが 1 つの配列に結合されて渡され、call は call として使用されます。渡されます (2 番目のパラメーターから始まります)。
たとえば、func.call(func1,var1,var2,var3) の対応する apply 書き込みメソッドは次のとおりです。 func.apply(func1,[var1,var2,var3])
ヒント (コードエレガントで実行効率が高い)
コードをコピー
コードは次のとおりです:
alert (Math.max(5,8) ) //8 alert(Math.max(5,7,9,3,1,6)) //9 var arr=[5, 7,9,1] alert(Math.max.apply(null,arr));