據我所知,我們使用foo.call()
來鏈接對象的構造函數。例如。以下內容:爲什麼我們必須在foo.call(this,param1,param2)中傳遞「this」參數?
function Product(name, price) {
this.name = name;
this.price = price;
}
function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
function Toy(name, price) {
Product.call(this, name, price);
this.category = 'toy';
}
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
使用call()
方法相反的,我們可以直接插入Product
的代碼爲:
function Food(name, price) {
this.name = name;
this.price = price;
this.category = 'food';
}
function Toy(name, price) {
this.name = name;
this.price = price;
this.category = 'toy';
}
var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
據我所知FOO()執行功能。因此,而不是Product.call(this, name, price);
如果我們直接調用功能Product(name , price)
那麼必須等同於寫this.name = name; this.price = price;
- 那麼,爲什麼不加入
Product(name , price)
直接分配給name
this.name
,即cheese.name
和fun.name
?
如果由於某種原因我們不得不使用呼叫方法,那麼爲什麼我們通過this
參數來調用方法?爲什麼我們不使用Product.call(name, price)
?
因爲['this''關鍵字](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this)是如何工作的(在'Product'函數中) – Bergi
@Bergi在'Product'裏面指的是什麼'this'? – user31782
沒有,如果你把它叫做Product(name,price)'。當你稱之爲「Product.call(this,name,price)」時,你通過'call'傳入的'this' - 即作爲新玩具或食物的'this'。 – Bergi