【发布时间】:2012-07-26 05:35:29
【问题描述】:
我想知道以下内容。 给出此代码:
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"
从first 创建的所有对象显然应该继承
prop 财产。
但是为什么从second 创建的对象在迭代它时仍然在其属性中显示prop,请注意它的值是undefined。
我希望在将可枚举描述符设置为 false 时,从该原型继承的对象不应再显示这些属性
编辑: 当我用一种方法扩展 Object.prototype (无论出于何种原因) 并将方法可枚举描述符设置为 false 它的行为符合预期
有人可以解释一下吗,也许我想错了方向
谢谢你的答案=)
【问题讨论】:
-
在说明中,我只想说明一下,给定名称“proto”和(错误的)用法“proto”(假设您自己没有将两者混合) 可能会引起很多混乱,我建议将其命名为不太混乱的名称。另外,请注意,原型是构造函数的方法(Object.prototype 是构造新对象的函数 Object() 的方法(使用 new Object() 或简单的 {})您仅使用 Object.create 创建基于对象的继承创建对象的扩展。
-
无法复制。 this much simpler code 怎么样,它是否对您显示相同的行为(或者我的抽象错误)?
-
是的,它表现出相同的行为(至少在使用 Chrome 时)我第一次在钛合金中注意到这种行为
-
好的,我已经把你的问题简化了很多。
-
@BenjaminGruenbaum Thx 注意到这一点,关键是在我的代码中我使用它例如:JSBin 具有继承和私有变量,我只是在 JSBin 上以类似的方式写下来模式,因为我注意到了其中的行为,所以此刻我没有想到一个更简单的例子。
标签: javascript inheritance prototype