javascript原型方法赋予VS下划线_.extend

时间:2013-06-24 10:27:01

标签: javascript prototype underscore.js extend

以下代码之间有什么区别吗?

普通javascript:

Array.prototype.addOrRemove = function(value) {
    var index = _.indexOf(this, value);

    if (index === -1) {
        this.push(value);
    } else {
        this.splice(index, 1);
    }
    return this;
};

下划线延伸:

_.extend(Array.prototype, {
    addOrRemove: function(value) {
        var index = _.indexOf(this, value);

        if (index === -1) {
            this.push(value);
        } else {
            this.splice(index, 1);
        }
        return this;
    }
});

一个人对另一个人有什么好处吗?

2 个答案:

答案 0 :(得分:3)

在这种情况下,没有任何一个。如果要添加多个新属性/方法,下划线方法会更好。

但是我建议不要修改Array原型,除非你知道你正在使用什么库以及它们在做什么,如果你覆盖某些方法,那么破坏某些其他库(PrototypeJS)和浏览器本身的功能将非常容易。 。这只是一个侧面说明......

答案 1 :(得分:2)

如果你无意中覆盖了一个Array方法,那么下划线方法会使你的日子变得疲惫不堪。

var extention = {
    indexOf: function () {
         // ...
    },
addOrRemove: function(value) {
    var index = _.indexOf(this, value);

    if (index === -1) {
        this.push(value);
    } else {
        this.splice(index, 1);
    }
    return this;
    }
}

_.extend(Array.prototype, extention);

如果您忘记了添加的内容或者覆盖了哪种原生方法,可能更难找到问题。

顺便说一下,Array.prototype方法更加友好。