我在一个页面的js的开头加入了以下代码
Array.prototype.search = function (name, value)
{
for (var li in this) {
if (this[li][name] == value) {
return this[li];
}
}
return false;
};
这个方法因为我用的挺多的才加入的,
但是加入了这个方法产生了一个问题 就是以后for in 循环数组的时候多了一个键值对!
最后一个键值对为:function (name, value)
{
for (var li in this) {
if (this[li][name] == value) {
return this[li];
}
}
return false;
}
这个怎么办???
因为for in会循环原型链,不单单是Array,你在任何object 的prototype上面加东西都会有你说的这种效果。办法就是用hasOwnProperty
判断一下,这也是一个遍历object的时候比较好的习惯
bject.defineProperty(Array.prototype, "search", {
enumerable: false,
value: function (name, value) {
for (var li in this) {
if (this[li][name] == value) {
return this[li];
}
}
return false;
};
});
Array.prototype.search = function (name, value){
for (var li in this) {
if (this.hasOwnProperty(li)) {
if (this[li][name] == value) {
return this[li];
}
}
}
return false;
};
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。