近日,由于更改ECMAScript的5定义属性,我重新审视我们是否可以安全地延长本地JavaScript原型的问题。 事实上,一直以来我都延伸,就像数组和函数原型,但我避免使用对象这样做,为明显的原因。 在茉莉单元测试,加入Object.prototype中规范,以规范为我个人的框架,用的Object.prototype不可枚举功能扩展已经出现是安全的。 就像一个“类型”的属性数据的属性,但是,与getter / setter方法是做任何异常处理有意想不到的后果。 还有的与其他库发生冲突的可能性 - 尽管在我的工作中,几乎没有出现。 尽管如此,只要功能是不可枚举,它看起来像延长Object.prototype中可以是安全的。
你怎么看? 它是安全的,现在延长Object.prototype中? 请大家讨论。
原产于JavaScript的扩展对象可能会变得有点更安全,通过多种碰撞的担忧仍然站立。 一般来说,除非你扩展对象以支持从更近的标准standartized行为真的会仍然要安全得多引进包装 - 这是很容易当你在控制的唯一一个做正确的事情的方式。
以英语为母语环境对象(DOM元素和节点,AJAX的东西)的,新的JS标准还是不给,也可以说不能给你那些除了自己的接口标准是什么定义任何交互的任何保证。 永远不要忘记,他们是通过许多不同的脚本引擎潜在的访问,因此不需要为一个特定语言的怪癖进行调整 - JS。 所以建议不延长那些要么仍然有效为好。
明确的,绝对的答案是...
“这取决于。” :)
扩展任何内置的JavaScript对象可以是完全安全的,也可以是一个完整的灾难。 这取决于你在做你正在做什么,以及如何。
使用智能惯例和常识和测试地狱外的吧。