为什么扩展原生对象是一种不好的做法?

8 浏览
0 Comments

为什么扩展原生对象是一种不好的做法?

每个JS意见领袖都说扩展原生对象是一种不好的做法。但是为什么呢?会有性能损耗吗?他们担心有人会以“错误的方式”来进行扩展,并将可枚举类型添加到Object中,从而实际上破坏了对任何对象的所有循环吗?

TJ Holowaychukshould.js为例。他Object上添加了一个简单的getter,一切都运行正常(源代码)。

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

是否有反对扩展原生类型的论据?

0