<分区>
我读过几篇文章,建议在 JavaScript 中扩展内置对象是个坏主意。例如,我向 Array
添加了一个 first
函数...
Array.prototype.first = function(fn) {
return this.filter(fn)[0];
};
太好了,现在我可以根据谓词获取第一个元素了。但是当 ECMAScript-20xx 决定首先添加到规范中并以不同的方式实现时会发生什么? - 好吧,突然之间,我的代码采用了非标准实现,开发人员失去了信心,等等。
然后我决定创建我自己的类型...
var Enumerable = (function () {
function Enumerable(array) {
this.array = array;
}
Enumerable.prototype.first = function (fn) {
return this.array.filter(fn)[0];
};
return Enumerable;
}());
所以现在,我可以将一个数组传递给一个新的 Enumerable,然后首先调用 Enumerable 实例。伟大的!我尊重 ECMAScript-20xx 规范,我仍然可以做我想让它做的事。
然后发布了 ES20XX+1 规范,引入了 Enumerable
类型,它甚至没有第一个方法。现在发生了什么?
本文的症结归结于此;扩展内置类型到底有多糟糕,我们如何才能避免 future 的实现冲突?
注意:使用 namespace 可能是解决此问题的一种方法,但话又说回来,事实并非如此!
var Collection = {
Enumerable: function () { ... }
};
当 ECMAScript 规范引入 Collection
时会发生什么?