重新审视在ECMAScript 5之后扩展原生原型

时间:2012-08-02 16:29:29

标签: javascript ecmascript-5

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

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

2 个答案:

答案 0 :(得分:1)

将原生对象扩展到JavaScript可能会变得更安全,因为许多碰撞问题仍然存在。一般来说,除非您从最近的标准中扩展对象以支持标准化行为,否则引入包装器仍然会更加安全 - 当您成为控制中的唯一一个时,更容易以正确的方式做事。

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

答案 1 :(得分:0)

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

“这取决于。” :)

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

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