【发布时间】:2012-01-25 15:34:53
【问题描述】:
偶尔有一个 JS framework 或库认为在 Object 或 Array 的原型中添加一些新功能是一个非常明智的想法。我现在找不到更多示例,但我确实记得我之前遇到过问题。当然,这样做会破坏旧的 for(...in...) 循环,因为突然间这些属性现在也被枚举了。要绕过它,您必须在访问之前使用.hasOwnProperty() 检查每个枚举属性。在尝试编写健壮的代码时,这很麻烦。
所以我想知道 - 有没有什么方法可以让我自己的对象不继承自 Object?最初使用.prototype 没有产生任何结果。也许它有一些技巧?还是一切都会继承自 Object 而我对此无能为力?
补充:我想我应该注意到我希望它用于浏览器中的客户端脚本,并且兼容性应该包括 IE6,或者至少 IE7。其他浏览器版本要求更宽松,当然越多越好。 (是的,可悲的是,企业界仍然生活在 IE 世界中……)
【问题讨论】:
-
坏老
for(...in...)循环肯定 -
@RobAgar - 为什么会这样?真的,我已经厌倦了写像
for (var i, l = myArray.length; i < l; i++)这样的东西。我渴望可靠的“foreach”构造,它是几乎所有当代语言的事实上的标准。 -
通常是改变原型的框架,也提供了一种循环遍历元素的方法。在 Mootools 中,
myObj.each()将完成这项工作.. 还有["foo","bar"].each() -
因为
for...in不区分函数和非函数属性,这很少是我想要的。为了我的钱,像 Mootoolseach()这样的迭代器提供了更好的foreach等价物。 -
我认为也许覆盖 propertyIsEnumerable 可以工作,但我试过了,浏览器似乎不接受我的修改版本。
标签: javascript inheritance object