比方說,我有一個構造函數:什麼時候在JavaScript中誕生的原型對象?
function Cat()
{
this.tail = "long";
this.colour = "black";
}
console.log(Cat.prototype);
// returns an empty [object Object] with no properties (checked with `for...in` loop).
因此,似乎在這一點上Cat.prototype
沒有tail
和colour
。
var Charlie = new Cat();
console.log(Charlie.tail);
那麼,如何Charlie
繼承,如果他們沒有在其原型定義的Cat
屬性。我假設原型對象的整個觀點是鏡像或存儲構造函數的屬性,它將被所有cat
實例繼承 - 這是錯誤的嗎?
原型Object在什麼時候被這些屬性填滿?或者僅當我明確設置Cat.prototype.eyes = brown
爲例時纔會發生這種情況?
此外,查詢對象原型的屬性的正確方法是什麼?這是一個for...in
循環嗎?我想它不能是Object.getOwnPropertyNames(Cat.prototype)
,因爲那不會返回繼承的屬性。
在你需要把方法(函數)的原型,而不是字符串屬性... –
是的,你可以做'Object.getOwnPropertyNames(貓。原型)',這沒什麼錯。 –