对于一个层级很深的对象,如果动态修改其enumerable值

Shanny
  • 492

比如

a: {
 b1: {},
 b2: {},
 b3: {}
}

然后想a.b2, a.b3的是不可枚举的

Object.defineProperty(a, 'b2', {
    enumerable: false
});

Object.defineProperty(a, 'b3', {
    enumerable: false
});

除了这么做,还有什么动态的方式吗

回复
阅读 257
2 个回答
function defineProperty(data, keys, config) {
    keys.forEach(key => {
    const props = key.split('.')
        props.reduce((obj, prop, i, arr) => i == arr.length-1 ? Object.defineProperty(obj, prop, config) : obj[prop], data);
  })
    return data;
}

var a = {
 b1: {},
 b2: {},
 b3: {}
}

defineProperty(a, ['b2','b3'], {enumerable: false})

比如为原型增加属性,然后通过继承获取新增加的属性,然后在遍历的时候使用 hasOwnProperty() 就可以了。
也可以使用 构造函数创建 或者 Class。

for (let i in iterable) {
  if (iterable.hasOwnProperty(i)) {
    console.log(i); // 0, 1, 2, "foo"
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏