2012-04-22 13 views
7

Sto provando a utilizzare defineProperty per rendere gli attributi non visualizzati in per ... in ciclo, ma non funziona. Questo codice è corretto?javascript defineProperty per rendere un attributo non enumerabile

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); 
} 

risposta

17

Item non ha una proprietà denominata nonEnum (check it out). È una funzione (costruttore) che creerà un oggetto che ha una proprietà chiamata nonEnum.

Quindi questo si potrebbe lavorare:

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

si potrebbe anche scrivere questa funzione come questa:

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

jsFiddle Demo

+2

dovrebbe segnare questa come la risposta corretta, @ lorenzo-c. – jackyalcine