ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 学習のヒント: 呼び出しと適用の違い

JavaScript 学習のヒント: 呼び出しと適用の違い

高洛峰
高洛峰オリジナル
2017-01-12 11:35:021394ブラウズ

1.
call メソッドを呼び出す
オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。
thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。
簡単な例 (関数呼び出し):

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 ); より複雑な例 (メソッド呼び出し):

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);

呼び出しは、c1 のメソッドを実行のために c2 に置くことを意味することに注意してください。c2 には showNam() メソッドがありません。 c1 のメソッドを c2 に移動して実行するため、this.name は class2 になるはずで、実行結果は次のようになります。 ) は、Class1 オブジェクトを使用することを意味します。このオブジェクトの代わりに、Class2 には Class1 のすべてのプロパティとメソッドが含まれるのではないでしょうか? c2 オブジェクトは、Class1 のメソッドとプロパティを直接呼び出すことができます。 実行結果は次のようになります。
はい、以上です。これは、JavaScript がオブジェクト指向で継承をシミュレートし、多重継承を実装する方法です。

多重継承

function Class1() 
{ 
this.showTxt = function(txt) 
{ 
alert(txt); 
} 
} 
function Class2() 
{ 
Class1.call(this); 
} 
var c2 = new Class2(); 
c2.showTxt("cc");

それは非常に簡単です。多重継承を実現するには 2 つの呼び出しを使用するだけです
もちろん、プロトタイプ チェーンを使用するなど、js を継承する他の方法もあります。これはこの記事の範囲内ではありません。ここで call の使用法を説明します

call と apply について言えば、これら 2 つのメソッドは基本的に同じことを意味します。違いは、call の 2 番目のパラメータは任意の型にすることができるのに対し、apply の 2 番目のパラメータは配列でなければならないことです。 .


2. apply

の場合、Applyとcallは同じ機能ですが、パラメータが異なります。
最初のパラメータの意味は同じですが、2 番目のパラメータの場合:
apply はパラメータ配列を渡します。つまり、複数のパラメータが 1 つの配列に結合されて渡されますが、call は call のパラメータとして渡されます ( 2 番目のパラメータから開始します)。
たとえば、func.call(func1,var1,var2,var3) の対応する apply 書き込みメソッドは次のとおりです: func.apply(func1,[var1,var2,var3])

ヒント (コードはエレガントで実行効率も高い)は高いです)

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); 
}

その他 JavaScript についてさらに学習するには、PHP 中国語 Web サイトにある call と apply の違いに関する関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。