Mozilla の公式 Web サイトにある call() の紹介は次のとおりです:
Call() パラメータ
thisArg
JavaScript の call() メソッド
上記の複雑な説明に注意を払わず、段階的にプロセスを開始してください。
Call() メソッドのインスタンス
そこで、別の Hello, World を書きました:
次に、別の例を見てみましょう。
print.call(obj, "Hello", "World");
ここでのみ、渡すものはまだ未定義です。前の例で未定義なのは、パラメーターを渡す必要があるためです。これは実際には call の使用法を反映していません。もっと良い例を見てみましょう。
var h={p1:"hello", p2:"world", print:print};
h.print("fd");
var h2={p1:"こんにちは", p2:"世界"};
print.call(h2, "何も");
呼び出しとは、自分のメソッドやオブジェクトを呼び出すのと同じように、他の人のメソッドやオブジェクトを借りて呼び出すことを意味します。 h.print では、関数がメソッドとして呼び出されるとき、これは関連するオブジェクトを指します。この例では、h2 が print を呼び出したのか、print が h2 を呼び出したのかがわかりませんでした。そこで、Mozilla の例を引用しました
if (価格
throw RangeError('マイナス価格の製品「' name '」は作成できません');
これを返してください;
}
関数 Food(名前、価格) {
Product.call(this, 名前, 価格);
This.category = '食べ物';
}
Food.prototype = new Product();
var チーズ = new Food('feta', 5);
console.log(チーズ);
var h2= function(no){
This.p1 = "こんにちは";
This.p2 = "世界";
Print.call(this, "nothing");
};
h2();
h2 は、関数 print を呼び出すレシーバーとして機能します。 Food の例と同様に、子コンストラクター内で、親コンストラクターの call メソッドを呼び出すことで継承を実装できます。
Callメソッドの利点については、「効果的なJavaScript」で紹介しています。
1. call メソッドを使用して、関数を呼び出すようにレシーバーをカスタマイズします。
2. call メソッドを使用して、指定されたオブジェクトに存在しないメソッドを呼び出します。
3. call メソッドを使用して、ユーザーがコールバック関数のレシーバーを指定できる高階関数を定義します。