【发布时间】:2012-08-02 16:29:28
【问题描述】:
最近,鉴于 ECMAScript 5 中定义属性的变化,我重新审视了我们是否可以安全地扩展原生 JavaScript 原型的问题。事实上,一直以来我都扩展了 Array 和 Function 之类的原型,但出于显而易见的原因,我避免使用 Object 这样做。在 Jasmine 的单元测试中,通过将 Object.prototype 规范添加到我自己的个人框架的规范中,使用不可枚举的 函数 扩展 Object.prototype 似乎是安全的。然而,像“类型”属性这样的数据属性,带有执行任何异常处理的 getter/setter 会产生意想不到的后果。仍然存在与其他库发生冲突的可能性——尽管在我的工作中,这几乎从未出现过。尽管如此,只要函数不可枚举,看起来扩展 Object.prototype 是安全的。
你怎么看?现在扩展 Object.prototype 是否安全?请讨论。
【问题讨论】:
-
我会广泛同意使用不可枚举的描述符扩展对象是安全的。至于冲突,如果命名空间适当,这些冲突可以最小化,即您可以添加
String.prototype.myExtensions.someMethod而不仅仅是String.prototype.someMethod。 -
用另一个对象扩展一个对象,有点像合并函数,会非常有用。
-
多年过去了,现在有一个关于Modifying built-in prototypes in ES6的问题:-)