开发者社区> 问答> 正文

关于javascript中给数组新注册方法的后遗症

我在一个页面的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;
}

这个怎么办???

展开
收起
a123456678 2016-07-18 10:09:53 2252 0
2 条回答
写回答
取消 提交回答
  • zid

    因为for in会循环原型链,不单单是Array,你在任何object 的prototype上面加东西都会有你说的这种效果。办法就是用hasOwnProperty 判断一下,这也是一个遍历object的时候比较好的习惯

    2019-07-17 19:57:30
    赞同 展开评论 打赏
  • 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;
    };
    2019-07-17 19:57:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载