2012-04-17 17 views
5

Ho creato questo oggetto e le sue proprietà:Perché il ciclo for non funziona sulle mie proprietà Javascript?

var obj = {}; 

Object.defineProperty(obj, "value", { 
    value: true, 
    writable: false, 
    enumerable: true, 
    configurable: true 
}); 

var name = "John"; 

Object.defineProperty(obj, "name", { 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

Allora io chiamo un ciclo for su di loro:

for (var prop in obj) { 
    console.log(prop); 
} 

Che secondo il mio tutorial, dovrebbe produrre i seguenti risultati:

value 
name 

Invece visualizza solo il valore. Perché il nome non viene visualizzato?

+0

Si prega di accettare una delle risposte che è risolto il tuo problema. Questo aiuta altri utenti in futuro quando affrontano questo problema .. :) –

risposta

6

Il valore predefinito per enumerable in defineProperty è false; le proprietà non enumerabili non vengono visualizzate nei loop for…in. (Questo è il punto principale del flag enumerable). Se aggiungi anche enumerable:true alla seconda definizione, la "risolverà".

Vedere some docs.

5

Perché la proprietà nome non è definito come enumerabile, impostare la definizione nome

Object.defineProperty(obj, "name", { 
    enumerable: true, 
    get: function(){ return name; }, 
    set: function(value){ name = value; } 
}); 

e verrà visualizzato.