如何使用" for in"来访问JavaScript对象的属性。用`Object.defineProperty`定义它们时循环

时间:2017-06-21 00:22:44

标签: javascript

我有一个JavaScript对象,它有一些使用Object.defineProperty函数创建的属性。我想使用" for in"迭代它的所有属性。方法,但忽略这些属性。还有其他方法可以做到这一点吗?



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定义的不动产,但是当我们使用" for"来迭代属性时循环" prop3"被忽略了。

2 个答案:

答案 0 :(得分:3)

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

希望我帮忙;)

供将来参考:MDN

答案 1 :(得分:1)

这不是for in循环,但可能仍然适合你。您可以使用Object.getOwnPropertyNames获取这些属性名称,然后循环遍历它们:

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