2012-04-22 23 views
7

我想使用defineProperty使屬性不會出現在for循環中,但它不起作用。這段代碼是否正確?JavaScript defineProperty使一個屬性不可枚舉

function Item() { 
    this.enumerable = "enum"; 
    this.nonEnum = "noEnum"; 
} 
Object.defineProperty(Item, "nonEnum", { enumerable: false }); 

var test = new Item(); 

for (var tmp in test){ 
    console.log(tmp); 
} 

回答

17

Item沒有屬性命名nonEnumcheck it out)。它是一個(構造函數)函數,它將創建一個名爲nonEnum的屬性的對象。

所以這一個會工作:

var test = new Item(); 
Object.defineProperty(test, "nonEnum", { enumerable: false }); 

你也可以寫這個函數是這樣的:

function Item() { 
    this.enumerable = "enum"; 
    Object.defineProperty(this, "nonEnum", { 
     enumerable: false, 
     value: 'noEnum' 
    }); 
} 

jsFiddle Demo

+2

應當標註這是正確的答案,@洛倫佐-C。 – jackyalcine 2012-09-07 20:57:24