javascript属性non enumerable仍然可以找到... in

时间:2012-04-20 13:34:39

标签: javascript enumerable

我正在编写一个小的javascript库:我已经定义了一个Item对象,然后添加了一个带有Item.prototype.addNumber的函数,最后我把它设置为不可枚举,但如果我尝试记录Item的使用for...in循环的方法仍会出现该函数。 这是我的代码,我做错了吗? (在Chrome 18和Firefox 11上测试)

function Item() {
    ...
}

Item.prototype.addString= function() {
    ...
}

Object.defineProperty(Item, "addString", { enumerable: false });

2 个答案:

答案 0 :(得分:5)

您在Item而非Item.prototype上定义了该属性。

Object.defineProperty(Item.prototype, "addString", { enumerable: false });

如果您最初使用Object.defineProperty addString添加到Item.prototype,那么您可以明确(或隐式)设置属性描述符同时...

这将隐式设置enumerable:false,以及falseconfigurable的{​​{1}}。

writable

或者,如果您只想Object.defineProperty(Item.prototype, "addString", { value: function() { ... } }); enumerable,则可以执行此操作...

false

答案 1 :(得分:1)

您正在addString上定义一个属性(Object)(不可枚举的属性),并在addString的原型上定义另一个Item(默认可枚举)

A for ( in )遍历原型链上的属性,这就是它出现的原因。