次の例で call (および apply) メソッドがどのように機能するかを理解しています。
var Bob = {
name: "Bob",
greet: function() {
alert("Hi, I'm " + this.name);
}
}
var Alice = {
name: "Alice",
};
Bob.greet.call(Alice); // Hi, I'm Alice
私が理解していることから、上記で起こっていることは、アリスのスコープで呼び出されたボブオブジェクトのグリーティングメソッドです。
継承を許可するコンストラクター関数で call メソッドが使用されている以下の例で、舞台裏で何が起こっているのか誰かが説明できますか?
function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
var chicken = new Food('chicken','40');
console.log(chicken); //{ name= "chicken", price="40", category="food"}
最初の例と 2 番目の例を関連付けることができません。最初の例では、call メソッドが何かを実行している関数 (アラート) で呼び出されますが、2 番目の例では、call メソッドがコンストラクター関数で使用されています。一部のプロパティを初期化しています。