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)的建议可能归结为以下之一:
for..in
可能无法正常工作- 其他人可能也想用相同的函数名扩展 Array
- 它可能无法在每个浏览器中正常工作,即使使用了 shim。
这是我的回复:
- 您通常不需要在 Array 上使用
for..in
。如果这样做,您可以使用hasOwnProperty
来确保它是合法的。 - 只有当您知道自己是唯一一个这样做的人时才扩展 natives或者当它是像
Array.prototype.filter
这样的标准东西时。 - 这很烦人,让我很苦恼。旧的 IE 有时在添加这种功能时会出现问题。您只需要根据具体情况查看它是否有效。对我来说,我遇到的问题是将
Object.keys
添加到 IE7。它似乎在某些情况下停止工作。您的里程可能会有所不同。
查看这些引用资料:
- http://perfectionkills.com/extending-native-builtins/
- http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permitted-extending-built-ins-5211542
- https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter
- https://github.com/kriskowal/es5-shim
祝你好运!
关于JavaScript:扩展 Array.prototype 有什么危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859828/