使用DontEnum设置自定义属性

时间:2009-05-15 17:50:19

标签: javascript properties dontenum

如果我创建:

Object.prototype.count = function() {};
var m = {prop: 1};

for(var i in m)
    window.status += i + ", ";
上面代码中的

i还包含由其原型继承的count。现在我想要 要知道是否有办法将自定义属性设置为标志DontEnum(它不能为自定义属性设置),因此不会枚举它。

我知道我可以if(m.hasOwnProperty(i))只检查其属性,但是如果我 写一种数组的API我应该对程序员说要记住......和 这是不可接受的!

2 个答案:

答案 0 :(得分:4)

实际上,Object对象有一个属性'propertyIsEnumerable',但它不是很有用。也许http://dhtmlkitchen.com/learn/js/enumeration/dontenum.jsp可以为您提供更多见解?如果你按照这些章节进行操作,你最终会得到一个简单问题“如何设置DontEnum属性”的页面,回答得更简单,非常令人失望:“你做不到。”幸运的是,还有更多的章节。你应该最终得到一个包含一个有趣短语的页面:“好吧,好吧,IE是废话,JavaScript很糟糕,等等......等等......时间停止抱怨并卷起袖子。” 但教程的底线是:“ JavaScript中的可枚举性会产生严重问题。”

答案 1 :(得分:3)

从JavaScript 1.8.5开始,您可以使用Object方法defineProperty

Object.defineProperty (object, propertyName, attributes);

其中attributes是一个地图,您可以在其中设置各种属性,例如valueenumerablewritable。如果属性存在则会被修改,否则会被创建。

Juriy Zaytsev构建了一个ECMAScript 5 compatibility table,您可以在其中找到支持defineProperty(以及许多其他功能)的浏览器,但他忽略了Safari不支持defineProperty的DOM对象 - 恰恰相反,IE! :( -

修改

Juriy更新了表格。