如果我创建:
Object.prototype.count = function() {};
var m = {prop: 1};
for(var i in m)
window.status += i + ", ";
上面代码中的 i
还包含由其原型继承的count
。现在我想要
要知道是否有办法将自定义属性设置为标志DontEnum(它不能为自定义属性设置),因此不会枚举它。
我知道我可以if(m.hasOwnProperty(i))
只检查其属性,但是如果我
写一种数组的API我应该对程序员说要记住......和
这是不可接受的!
答案 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
是一个地图,您可以在其中设置各种属性,例如value
,enumerable
和writable
。如果属性存在则会被修改,否则会被创建。
Juriy Zaytsev构建了一个ECMAScript 5 compatibility table,您可以在其中找到支持defineProperty
(以及许多其他功能)的浏览器,但他忽略了Safari不支持defineProperty
的DOM对象 - 恰恰相反,IE! :( -
Juriy更新了表格。