JavaScript:扩展 Array.prototype 有什么危险?

标签 javascript coding-style prototype

Google JavaScript 风格指南 advises against extending the Array.prototype . 但是,我使用了 Array.prototype.filter = Array.prototype.filter || function(...) {...} 作为在它们不存在的浏览器中拥有它(和类似方法)的一种方式。 MDN其实提供了similar example .

我知道 Object.prototype 问题,但 Array 不是哈希表。

在扩展 Array.prototype 时可能会出现哪些问题导致 Google 反对它?

最佳答案

大多数人都忽略了这一点。在我看来,填充或填充标准功能(如 Array.prototype.filter)以使其在较旧的浏览器中工作 是个好主意。不要听仇恨者的话。 Mozilla 甚至在 MDN 上向您展示了如何执行此操作。通常不扩展 Array.prototype 或其他原生原型(prototype)的建议可能归结为以下之一:

  1. for..in 可能无法正常工作
  2. 其他人可能也想用相同的函数名扩展 Array
  3. 它可能无法在每个浏览器中正常工作,即使使用了 shim。

这是我的回复:

  1. 您通常不需要在 Array 上使用 for..in。如果这样做,您可以使用 hasOwnProperty 来确保它是合法的。
  2. 只有当您知道自己是唯一一个这样做的人时才扩展 natives或者当它是像 Array.prototype.filter 这样的标准东西时。
  3. 这很烦人,让我很苦恼。旧的 IE 有时在添加这种功能时会出现问题。您只需要根据具体情况查看它是否有效。对我来说,我遇到的问题是将 Object.keys 添加到 IE7。它似乎在某些情况下停止工作。您的里程可能会有所不同。

查看这些引用资料:

祝你好运!

关于JavaScript:扩展 Array.prototype 有什么危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859828/

相关文章:

javascript - webRTC 音频/语音

javascript - 如何使用javascript从标签标签中获取文本?

objective-c - Xcode 和检查代码约定

c# - 使用 "variable !== FALSE"的缺点

java - 在 Intellij for Java 的单独一行上包装链式方法调用

javascript - 如何访问新创建的对象的变量?

javascript - hasOwnProperty ('getTime' ) 在日期对象上返回 false

javascript - 从函数传递 Prop ? react

javascript - vuejs 应用程序无法集成切换代码

javascript - 我无法更改构造函数中的属性