在 for. 中继承了不可枚举的属性.in loop (JavaScript)



我有一个对象p,有一个可枚举的属性x

var p = Object.create(Object.prototype, {
  x: {
    value: "frog",
    enumerable: true
  }
});

我创建了一个对象,该对象继承自 p,并使用不可枚举的属性覆盖属性 x

var o = Object.create(p, {
  x: {
    value: "bird",
    enumerable: false
  }
});

你怎么看,属性x是否会在for中枚举...在 O 的循环中?

for (var n in o) {
  console.log(n);
}
好吧,在

Chrome和IE9中,它将被枚举(我认为这很奇怪);在FF中,它不会被枚举。

哪一个是正确的行为?

下面是一个完整的示例:http://jsfiddle.net/hnvsM/3/

据此,这绝对是chrome和ie9中的一个错误。强调我的。

枚举对象的属性包括枚举 其原型的属性,以及原型的原型,以及 依此类推,递归;但是在以下情况下不会枚举原型的属性 它是"阴影"的,因为原型链中的一些先前对象 具有同名的属性。[[可枚举]] 的值 在确定属性时不考虑属性 原型对象被原型上的前一个对象遮蔽 链。

这是 V8 中的一个已知错误。关于这个问题的错误报告已经有一段时间了。

问题 705:无法隐藏从 for-in 继承的可枚举属性

最新更新