2017-06-21 3 views
1

J'ai un objet JavaScript qui a des propriétés qui ont été créées en utilisant la fonction Object.defineProperty. Je voudrais parcourir toutes ses propriétés en utilisant la méthode "for in", mais ces propriétés sont ignorées. Y a-t-il un autre moyen de le faire?Comment accéder aux propriétés d'un objet JavaScript en utilisant une boucle "for in" lorsqu'elles sont définies avec `Object.defineProperty`

var myObject = { 
 
    prop1: "This is property 1", 
 
    prop2: "This is property 2" 
 
}; 
 
(function(){ 
 
    var prop3 = "This is a read only property"; 
 
    Object.defineProperty(myObject, "prop3", { 
 
    get: function(){ 
 
     return prop3; 
 
    }, 
 
    set: function(){ 
 
     console.warn('"myObject.prop3" is read only.'); 
 
    } 
 
    }); 
 
})(); 
 

 
alert("Property 3 = " + myObject.prop3); 
 

 
for(var k in myObject){ 
 
    alert(myObject[k]); 
 
}

La première alerte nous montre que « prop3 » est un bien réel qui a été défini avec Object.defineProperty, mais lorsque nous parcourons les propriétés en utilisant un « pour en » boucle « prop3 » est ignoré.

Répondre

3
Object.defineProperty(myObject, 'prop3', { 
    enumerable: true 
}); 

Espoir j'ai aidé;)

Pour référence future: MDN

1

Ce n'est pas avec la boucle for in, mais il est peut-être encore assez bon pour vous. Vous pouvez obtenir ces noms de propriété avec Object.getOwnPropertyNames, puis boucle à travers eux:

var propNames = Object.getOwnPropertyNames(myObject); 
for(var i=0; i<propNames.length; i++) { 
    alert(myObject[propNames[i]]); 
} 
+0

Grande réponse, mais @komnions réponse était plus le long des lignes de ce que je cherchais. Mais je t'ai quand même donné un "up". –