我想知道以下幾點。 給予這個代碼:被列舉不明財產影響的房產?
function displayprops(obj, name) {
console.log(name+":");
for(var prop in obj)
console.log(prop + ": " + obj[prop]);
}
var first = {prop: {}};
displayprops(first, "first"); // "prop: [object Object]"
var second = Object.create(first);
Object.defineProperty(second,"prop",{
enumerable:false
});
displayprops(second, "second"); // "prop: undefined"
從first
創建的所有對象都應該很明顯onherit的 prop
財產。
但是爲什麼從second
創建的對象在迭代時仍然在其屬性中顯示prop
,請注意其值爲undefined
。
我預計枚舉描述符設置爲false時,從該原型繼承的對象,不應該表現出這些屬性更多的
編輯: 當我延長Object.prototype中(無論何種原因)有一種方法 和枚舉描述符設置方法爲假 它的行爲與預期
有人能解釋這一點,也許在錯誤的方向即時通訊想着
Thx答案=)
在一個說明中,我只想指出,給定名稱「proto」和(壞)用法「__proto__」(假設你自己沒有混合這兩個)會引起很多混淆,我會建議命名它不那麼令人困惑。另外請注意,prototype是構造函數的一個方法(Object.prototype是Object()函數的一個方法,它構造新的對象(使用新的Object()或者簡單地)只使用Object.create創建基於對象的繼承創建一個對象的擴展 – 2012-07-27 14:17:20
不能重現,[這個簡單得多的代碼](http://jsbin.com/oqevam/4/edit)怎麼樣,它是否顯示出相同的行爲(或者是我的抽象錯誤) ? – Bergi 2012-07-27 14:17:58
是的,它顯示了相同的行爲(至少在使用Chrome時) 我第一次注意到鈦的這種行爲 – C5H8NNaO4 2012-07-27 14:19:32