2014-03-24 67 views
1

我正在學習JavaScript原型並試圖理解爲什麼會發生這種情況。我的理解是,在查找屬性的值時,在任何原型之前檢查對象。那麼,這是否打印「棕色」?爲什麼這個原型字段優先於同一個對象字段?

function Box(item) { 
    this.item = item; 
} 

Box.prototype.color = "brown"; 
Box.color = "blue"; 

var box = new Box(null); 
console.log(box.color); 

>>> brown 

回答

2

Box.color = "blue";一個屬性分配給功能Box,而不是它的一個實例。您可以通過運行console.dir(box)console.dir(Box)輕鬆驗證。

如果您想將屬性分配給一個實例,你必須先創建實例:

Box.prototype.color = "brown"; 

var box = new Box(null); 
box.color = "blue" 

或分配給它的構造函數中:

function Box(item) { 
    this.item = item; 
    this.color = 'blue'; 
} 
2

因爲Box.color是構造函數的屬性,它將永遠不會分配給實例對象。在初始化box對象後,它只獲得this.itemprototype.color屬性。

相關問題