5

最近,鉴于 ECMAScript 5 中定义属性的变化,我重新审视了我们是否可以安全地扩展原生 JavaScript 原型的问题。事实上,一直以来我都扩展了 Array 和 Function 等原型,但出于显而易见的原因,我避免使用 Object。在 Jasmine 的单元测试中,通过将 Object.prototype 规范添加到我自己的个人框架的规范中,使用不可枚举的函数扩展 Object.prototype似乎是安全的。然而,像“类型”属性这样的数据属性,带有执行任何异常处理的 getter/setter 会产生意想不到的后果。仍然有可能与其他库发生冲突——尽管在我的工作中,这几乎没有出现过。尽管如此,只要函数不可枚举,看起来扩展 Object.prototype 是安全的。

你怎么看?现在扩展 Object.prototype 是否安全?请讨论。

4

2 回答 2

1

将原生对象扩展为 JavaScript 可能会变得更安全一些,但仍然存在许多冲突问题。通常,除非您扩展对象以支持最新标准的标准化行为,否则引入包装器确实会更安全 - 当您是唯一可以控制的人时,以正确的方式做事要容易得多。

说到环境原生的对象(DOM 元素和节点,AJAX 的东西),新的 JS 标准仍然没有给出,而且可以说,除了接口标准中定义的内容之外,不能保证与那些对象的任何交互。永远不要忘记它们可以通过许多不同的脚本引擎访问,因此不需要针对一种特定语言的怪癖进行定制 - JS。因此,不扩展这些内容的建议仍然有效。

于 2012-08-02T21:18:07.097 回答
0

确定的,绝对的答案是......

“这取决于。” :)

扩展任何内置的 JavaScript 对象可能是完全安全的,也可能是一场彻底的灾难。这取决于你在做什么以及你是如何做的。

使用聪明的做法和常识并测试它的地狱。

于 2012-08-02T17:01:28.903 回答