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

Con*_*ine 5 javascript ecmascript-5

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

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

Ole*_*kov 1

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

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