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

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

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


扩展JavaScript本身的对象可能变得更安全一些,因为许多碰撞问题仍然存在。 一般来说,除非您将对象从更新的标准延伸到支持标准化行为,否则引入包装器确实会更安全 - 当您是唯一受控制的人时,正确执行事情要容易得多。

说到环境本身的对象(DOM元素和节点,AJAX的东西),新的JS标准仍然没有给出,并且可以证明,除了界面标准中定义的那些之外,不能保证与这些对象的任何交互。 不要忘记,他们可能通过许多不同的脚本引擎进行访问,因此不需要针对特定​​语言的怪癖 - JS。 所以建议不要延长那些或者仍然站立。


绝对的答案是......

“这取决于。” :)

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

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

链接地址: http://www.djcxy.com/p/94019.html

上一篇: Revisiting extending native prototypes after ECMAScript 5

下一篇: Native way to merge objects in Javascript