为什么扩展原生对象是一种不好的做法?
- 论坛
- 为什么扩展原生对象是一种不好的做法?
8 浏览
为什么扩展原生对象是一种不好的做法?
每个JS意见领袖都说扩展原生对象是一种不好的做法。但是为什么呢?会有性能损耗吗?他们担心有人会以“错误的方式”来进行扩展,并将可枚举类型添加到Object
中,从而实际上破坏了对任何对象的所有循环吗?
以TJ Holowaychuk的should.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);
是否有反对扩展原生类型的论据?