使用原型来扩展本机对象不好
Is using Prototype to extend native objects bad?
我在某处读到,使用prototype
来扩展本机对象(String
,Number
,Array
等)是一个坏主意。这是真的吗?为什么或为什么不呢?
我不
认为这很糟糕。如果你看一下Ruby on Rails,很多原生对象都用自定义功能进行了扩展,这是一个非常好的框架。
如果更改本机对象上的现有方法,那将是不好的。 这可能会导致不可预见的后果。
在
Andrew Dupont 的 JSConf 2011 视频中对此进行了很好的讨论。 http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542
基本上要点是:
- 不要扩展
Object.prototype
- 有些人可能喜欢扩展东西,有些人不喜欢
- 你需要知道你在做什么
- 不要使用两个扩展内容的库,因为它可能很糟糕
- 扩展原型以添加标准功能几乎总是可以的。
我会避免扩展/修改本机对象的行为。
在团队环境中进行开发时,这至少是有意义的。
仅仅因为,几个月后,另一个编写另一段独立代码的开发人员不会立即识别更改的行为,除非在某处记录并在开始任务之前意识到它。
相反,我建议封装/"命名空间"-所有这些功能,以便有人可以选择或不使用修改后的函数。
此外,本机对象及其方法针对各种情况进行了全面测试。因此,在修改本机功能之前,您必须完全确定自己在做什么。
相关文章:
- 如何创建行为类似于本机对象的对象
- 如何在javascript中检测本机浏览器/引擎对象
- TypeError:对象函数Object(){〔本机代码〕}没有方法'方法'
- 使用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)
- 调用本机原型方法时扩展或继承对象原型
- 在 JavaScript 中依赖全局本机对象是否安全,尤其是 Object 对象
- 我怎么知道本机 JS 对象没有被篡改
- 将本机数组/对象转换为 Ember.Array/Ember.Object 的最佳实践
- 对象函数 Date() { [本机代码] } 在 Chrome 中使用 Date.js 时没有方法“compareTo”
- 通过带有对象子级的数组进行 React 本机映射 - 工作方式与在 react web 中不同
- 如何在 nodejs 中全局添加方法到 JSON、Date 或其他“本机”对象
- 使用原型来扩展本机对象不好
- 渲染时,未定义不是React本机中的对象
- 将本机浏览器事件对象转换为jQuery事件对象
- JavaScript:主机对象也是本机对象的示例是什么
- 在本机错误对象调用函数's结构
- 有没有一种方法可以在javascript中隔离本机对象扩展
- 实验:扩展本机对象
- 如何覆盖javascript本机对象的内置方法
- 本机事件对象的自定义方法