[英]JavaScript Object Contains inherit Property
我有一个网页,当我尝试使用以下方式在其中创建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 = ...
方法是不执行Object.prototype.inherit = ...
的代码,而是使用hasOwnProperty
重构您现在尝试编写的代码,该代码将告诉您是否直接在您的属性上设置了属性对象(即, 无需穿过对象的原型链):
for(var k in myVar) { if (myVar.hasOwnProperty(k)) { /* ... */ } }
当然,在使用明智hasOwnProperty
在今后所有for..in
代码进入代码库。
您既可以清理代码库, 又可以防止将来输入其他会自行更改Object.prototype
的代码的库对将来的影响。
可能包括的某些脚本正在修改Object.prototype以添加其自己的自定义函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.