为什么扩展本机对象是一种不好的做法?
每个JS意见领袖都说扩展本机对象是一种不好的做法。但是为什么?我们是否得到了性能上的打击?他们是否担心有人以“错误的方式”这样做,并将可枚举类型添加到 中,实际上破坏了任何对象上的所有循环?Object
以TJ Holowaychuk的.js为例。他添加了一个简单的getter,一切都很好(来源)。Object
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
这确实是有道理的。例如,可以扩展.Array
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
是否有任何反对扩展本机类型的论点?