我正在编写一个小的javascript库:我已经定义了一个Item
对象,然后添加了一个带有Item.prototype.addNumber
的函数,最后我把它设置为不可枚举,但如果我尝试记录Item的使用for...in
循环的方法仍会出现该函数。
这是我的代码,我做错了吗? (在Chrome 18和Firefox 11上测试)
function Item() {
...
}
Item.prototype.addString= function() {
...
}
Object.defineProperty(Item, "addString", { enumerable: false });
答案 0 :(得分:5)
您在Item
而非Item.prototype
上定义了该属性。
Object.defineProperty(Item.prototype, "addString", { enumerable: false });
如果您最初使用Object.defineProperty
将addString
添加到Item.prototype
,那么您可以明确(或隐式)设置属性描述符同时...
这将隐式设置enumerable:false
,以及false
和configurable
的{{1}}。
writable
或者,如果您只想Object.defineProperty(Item.prototype, "addString", {
value: function() {
...
}
});
为enumerable
,则可以执行此操作...
false
答案 1 :(得分:1)
您正在addString
上定义一个属性(Object
)(不可枚举的属性),并在addString
的原型上定义另一个Item
(默认可枚举)
A for ( in )
遍历原型链上的属性,这就是它出现的原因。