15

我在某处读到使用prototype扩展本机对象(String, Number,Array等)是一个坏主意。这是真的?为什么或者为什么不?

4

3 回答 3

5

我不认为这很糟糕。如果您看一下 Ruby on Rails,就会发现很多原生对象都使用自定义功能进行了扩展,这是一个非常好的框架。

如果您更改本机对象上的现有方法,那将会很糟糕。这可能会导致无法预料的后果。

于 2012-04-17T18:50:38.290 回答
5

在 Andrew Dupont 的 JSConf 2011 的这段视频中对此进行了很好的讨论。http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542

基本上要点是:

  • 不要延长Object.prototype
  • 有些人可能喜欢扩展东西,有些人不喜欢
  • 你需要知道你在做什么
  • 不要使用两个扩展东西的库,因为它可能很糟糕
  • 扩展原型以添加标准功能几乎总是可以的。
于 2012-04-17T19:54:06.113 回答
1

我不会扩展/修改本机对象的行为。

在团队环境中开发时,这至少是有意义的。

仅仅因为,几个月后,另一位开发人员编写另一段独立代码不会立即识别更改的行为,除非在某处记录并在开始他的任务之前意识到这一点。

相反,我建议封装/“命名空间”-ing 所有这些功能,以便有人可以选择或不使用修改后的功能。

此外,本机对象及其方法已针对广泛的案例进行了全面测试。因此,在修改本机功能之前,您必须完全确定自己在做什么。

于 2012-04-17T19:15:23.510 回答