由列出的不可计数的属性遮蔽的属性

Property shadowed by unenumerable property listed?

本文关键字:属性 可计数      更新时间:2024-04-07

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

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创建的对象在迭代时仍在其属性中显示prop,请注意其值为undefined

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

编辑:当我用一个方法扩展Object.prototype时(无论出于什么原因)并将方法枚举描述符设置为false它的行为与预期的一样

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

答案的Thx=)

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

它已经有一个错误报告了。如果我能再次找到它,我会把它发布在这里 给…

问题705:不可枚举属性无法在中对从的继承的可枚举属性进行阴影处理

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