0

我想知道以下内容。给出此代码:

function displayprops(obj, name) {
    console.log(name+":");
    for(var prop in obj)
        console.log(prop + ": " + obj[prop]);
}

var first = {prop: {}};
displayprops(first, "first"); // "prop: [object Object]"

var second = Object.create(first);
Object.defineProperty(second,"prop",{
     enumerable:false
});
displayprops(second, "second"); // "prop: undefined"

在 jsbin 演示

创建的所有对象first显然都应该继承该 prop属性。

但是为什么创建的对象在迭代它时second仍然显示在他的属性中,请注意它的值是. propundefined

我希望在将可枚举描述符设置为 false 时,从该原型继承的对象不应再显示这些属性

编辑:当我使用方法扩展 Object.prototype (无论出于何种原因)并将方法可枚举描述符设置为 false 时,它​​的行为符合预期

有人可以解释一下吗,也许我想错了方向

谢谢你的答案=)

4

1 回答 1

2

这是 V8 JavaScript 引擎中的一个错误。我以前遇到过。即使被不可枚举的属性遮蔽,原型链中的可枚举属性也包括在内。

已经有一个错误报告。如果我能再找到它,我会在这里发布。这里是...

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

在 Firefox 中测试它,你会得到预期的结果。

于 2012-07-27T14:18:03.800 回答