2017-06-21 156 views
1

我有一个JavaScript对象,它具有使用Object.defineProperty函数创建的一些属性。我想使用“for in”方法来遍历它的所有属性,但是这些属性被忽略。有另一种方法可以做到这一点吗?如何通过Object.defineProperty定义的“for in”循环访问JavaScript对象的属性

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

第一个提醒我们展示了“prop3”是与Object.defineProperty定义的不动产,但是当我们通过使用“为”循环“prop3”属性迭代被忽略。

回答

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

希望我帮助;)

以供将来参考:MDN

1

这不是for in循环,但也许仍然是对你不够好。你可以用Object.getOwnPropertyNames得到这些属性名称,然后循环遍历它们:

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

很好的答案,但@ komnions的答案更符合我所寻找的内容。但我仍然给你一个“上”。 –

相关问题