3

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

纯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;
    }
});

一个比另一个有什么好处吗?

4

2 回答 2

3

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

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

于 2013-06-24T10:29:29.910 回答
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 方法对性能更友好。

于 2013-06-24T10:35:03.887 回答