我不是很明白,爲什麼我會在第一個日誌消息Prototype: [object Object]
中獲得,第二個是Prototype: New Plant
?爲什麼我不能覆蓋類(函數)描述中的方法定義?
function Plant() {
this.toString = function() {
return "Plant";
}
}
function Fruit(name) {
Plant.call(this);
this.name = name;
this.toString = function() {
return "Fruit";
}
}
Fruit.prototype = Object.create(Plant.prototype);
var apple = new Fruit("apple");
console.log("Prototype: " + Object.getPrototypeOf(apple));
Plant.prototype.toString = function() {
return "New Plant";
}
console.log("Prototype: " + Object.getPrototypeOf(apple));
我想,既然我在工廠類中定義的toString()方法,所有的水果情況下會有這種方法呢?
非常感謝您的迴應!但是,如果我從Fruit函數中刪除了toString()描述,我仍然在Object.getPrototypeOf(apple)的第一次調用 - 它的原型:[object Object]上有相同的響應。 不應該是「植物」,因爲搜索將遵循從水果到植物的原型鏈,並且我必須在植物功能中使用toString()? –
@AntonPoliakov是的 - 因爲你用'+'運算符使用'Object.getPrototypeOf(apple)',並且Object原型函數的默認'.toString()'將被調用,並返回'[object Object ]'。請記住,原型對象是*自身*對象,並且* prototype *對象中唯一可以使用的'.toString()'是'Object.prototype'上的對象。 Fruit *實例獲得'.toString()'函數並不重要。 – Pointy
明白了。再次感謝! –