以下代码之间有什么区别吗?
普通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;
}
});
一个人对另一个人有什么好处吗?
答案 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方法更加友好。