我有一个网页,当我尝试使用它创建一个JavaScript对象时:JavaScript对象包含继承属性
var myVar = {};
生成的对象总是包含一个继承属性,这会干扰我的代码,除非在此页面上才会发生,任何人都知道为什么?
我有一个网页,当我尝试使用它创建一个JavaScript对象时:JavaScript对象包含继承属性
var myVar = {};
生成的对象总是包含一个继承属性,这会干扰我的代码,除非在此页面上才会发生,任何人都知道为什么?
有人完成了,并在Object.prototype
把事端。自己检查:
for(var k in {}) alert(k); // should get NO alerts
至于跟踪它,使用上面的输出来搜索您的代码库。首先要检查的地方是你在<script src="..."></script>
标签中包含的任何外部库。例如原型库的真正旧版本增加了Object.prototype
。
更新再评论从@Ahmad:
你有两个选择:
移动实施关闭原型,而不是把事情扩大作为第一个参数,例如: :
Object.inherit = function(obj, superClass, superClassName) {
/* change "this" to "obj" all throughout the code here */
}
和重构全部地方是这样做:
foo.inherit(a, b)
,而不是做:
Object.inherit(foo, a, b)
这种方法可能需要大量重新分解的努力效果显着。你的好处是你只留下Object.prototype
。
的第二个办法是离开单独做Object.prototype.inherit = ...
的代码,而不是重构你想现在就写使用hasOwnProperty
,它会告诉你,如果一个属性被直接设置在对象上的代码(即没有通过对象的原型链跋涉):
for(var k in myVar) {
if (myVar.hasOwnProperty(k)) {
/* ... */
}
}
当然是在进入该代码库所有未来for..in
代码使用hasOwnProperty
明智。
你可以做到既清理你的代码和是针对输入改变Object.prototype
自己的代码库等面向未来的。
也许您正在包含的某些脚本正在修改Object.prototype以添加自己的自定义函数。
@Ahmad:有没有图书馆有错?好奇.... – 2009-11-20 15:30:42
它不是一个库故障,有一个js文件,它将继承函数添加到Object原型,如下所示: Object.prototype.inherit = function(superClass,superClassName) { ... }; 你知道如何解决这个问题,而不删除上述?因为它在页面的其他部分需要 – Ahmad 2009-11-20 15:41:04
@Ahmad:看到我的更新 – 2009-11-20 15:58:20