繁体   English   中英

JavaScript对象包含继承属性

[英]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的评论

您有两种选择:

  1. 将实现移出原型,取而代之的是将要扩展的东西作为第一个参数,例如:

     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

  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM