2012-04-17 10 views
5

he creado este objeto y sus propiedades:¿Por qué mi bucle for no funciona en mis propiedades de 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; } 
}); 

Así que yo llamo un bucle en ellos:

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

que según mi tutorial, debe producir los siguientes resultados:

value 
name 

Pero en su lugar, solo muestra el valor. ¿Por qué el nombre no aparece?

+0

Acepte una de las respuestas que resuelve su problema. Esto ayuda a otros usuarios en el futuro cuando enfrentan este problema ... :) –

Respuesta

6

El valor predeterminado para enumerable en defineProperty es false; las propiedades no enumerables no aparecen en los bucles for…in. (Ese es el punto de la bandera enumerable). Si agrega enumerable:true a su segunda definición también, la 'arreglará'.

Ver some docs.

5

Debido a la propiedad de nombre no se define como enumerables, establecer una definición de nombre a

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

y se mostrará.

Cuestiones relacionadas