一尘不染

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

javascript

GoogleJavaScript样式指南建议不要扩展Array.prototype。但是,我用Array.prototype.filter=Array.prototype.filter || function(...){...}它来在不存在的浏览器中使用它(以及类似方法)。

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

扩展时可能会出现什么问题Array.prototype,使Google对此提出建议?


阅读 278

收藏
2020-04-25

共1个答案

一尘不染

大多数人都错过了这一点。我认为Array.prototype.filter,例如填充或填充标准功能,使其在较旧的浏览器中运行,是一个好主意。不要听那些讨厌的人。Mozilla甚至向您展示了如何在MDN上执行此操作。通常,不扩展Array.prototype或其他本机原型的建议可能归结为以下一种:

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

这是我的回复:

  1. 您通常不需要for..in在Array上使用。如果您这样做,可以hasOwnProperty用来确保它是合法的。
  2. 仅当您知道自己是唯一做到这一点的人, 或者 是标准的东西(如)时,才扩展本机Array.prototype.filter
  3. 这很烦人,已经使我难受了。旧版IE有时会在添加此类功能时遇到问题。您只需要逐个查看它是否有效。对我来说,我要添加Object.keys到IE7中的问题。在某些情况下,它似乎停止工作。你的旅费可能会改变。

祝好运!

2020-04-25