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

Shanny
  • 492

比如

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

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

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

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

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

回复
阅读 140
2 个回答

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

for (let i in iterable) {
  if (iterable.hasOwnProperty(i)) {
    console.log(i); // 0, 1, 2, "foo"
  }
}
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})

你知道吗?

宣传栏