JavaScript_javascript のヒントの call() と apply() の違い

WBOY
リリース: 2016-05-16 15:18:43
オリジナル
1047 人が閲覧しました

動的言語に触れたことがない場合、コンパイル言語の考え方で JavaScript を理解することは魔法のように奇妙に感じられるでしょう。なぜなら、意識的に不可能なことが頻繁に起こり、学習している場合には不合理にさえ感じるからです。 JavaScript という自由で常に変化し続ける言語の過程でこの感覚に遭遇したなら、これからは「偏見」を捨ててください、ここは間違いなくあなたにとって新しい大陸なのですから、JavaScript に任せましょう

さて、本題に戻りましょう。まず、JavaScrtipt の動的変更ランタイム コンテキスト機能を理解してください。この機能は主に apply メソッドと call メソッドの使用に反映されます。

1. メソッドの定義

メソッドの呼び出し:

構文: call(thisObj, Object)

定義: オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。


説明:

call メソッドを使用すると、別のオブジェクトに代わってメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。

thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。

適用方法:

構文: apply(thisObj, [argArray])

定義: オブジェクトのメソッドを適用して、現在のオブジェクトを別のオブジェクトに置き換えます。

説明:

argArray が有効な配列でない場合、または引数オブジェクトではない場合、TypeError が発生します。

argArray も thisObj も指定されていない場合は、Global オブジェクトが thisObj として使用され、パラメータを渡すことはできません。


----------------------------------------------- --- ----------------------------------

注: call メソッドと apply メソッドは、apply がパラメーターを渡すために配列を使用することを除いて、まったく同じです。


コード例:


function Animal(name) {
this.name = name;
this.showName = function() {
console.log(this.name);
};
}
function Cat(name) {
Animal.call(this, name);
}
Cat.prototype = new Animal();
function Dog(name) {
Animal.apply(this, name);
}
Dog.prototype = new Animal();
var cat = new Cat("Black Cat"); //call必须是object
var dog = new Dog(["Black Dog"]); //apply必须是array
cat.showName();
dog.showName();
console.log(cat instanceof Animal);
console.log(dog instanceof Animal); 
ログイン後にコピー
----------------------------------------------- --- --------------------------------


呼び出しをシミュレートし、この置換を適用します

function Animal(name) {
this.name = name;
this.showName = function() {
alert(this.name);
};
};
function Cat(name) {
this.superClass = Animal;
this.superClass(name);
delete superClass;
}
var cat = new Cat("Black Cat");
cat.showName();
ログイン後にコピー

概要:

それぞれの定義:

apply: オブジェクトのメソッドを適用し、現在のオブジェクトを別のオブジェクトに置き換えます。

call: オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。

彼らの共通点:

両方とも「別のオブジェクトの代わりにメソッドを呼び出すために使用でき、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更できます。」 - JScript5.5.chm から抜粋

それらの違い:

apply: パラメータは最大 2 つだけです - 新しい this オブジェクトと配列 argArray です。このメソッドに複数のパラメーターが渡された場合、もちろん、パラメーターが 1 つしかない場合でも、すべてのパラメーターが配列に書き込まれます。 argArray が有効な配列でない場合、または引数オブジェクトではない場合、TypeError が発生します。 argArray も thisObj も指定されていない場合は、Global オブジェクトが thisObj として使用され、パラメータを渡すことはできません。

call: これは直接パラメータ リストであり、主に、現在のこのインスタンス ポインタの一貫性を保つため、または特殊な状況下でこのポインタを変更するために、js オブジェクトのさまざまなメソッドが相互に呼び出すときに使用されます。 thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。

より簡単に言うと、apply と call の関数は同じですが、渡されるパラメーター リストの形式が異なります。たとえば、対応する apply 書き込みメソッド func.call(func1,var1,var2, var3) は次のとおりです: func.apply(func1,[var1 ,var2,var3])

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!