谷歌 JavaScript 风格指南建议不要延长Array.prototype https://google.github.io/styleguide/jsguide.html#disallowed-features-modifying-builtin-objects。
不过,我用过Array.prototype.filter = Array.prototype.filter || function(...) {...}
作为在不存在的浏览器中拥有它(和类似方法)的一种方式。 MDN实际上提供了类似的例子 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter#Compatibility.
我知道Object.prototype
问题,但是Array
不是哈希表。
延期时可能会出现哪些问题Array.prototype
这让谷歌提出反对?
大多数人都没有抓住这一点。 Polyfilling 或 shimming 标准功能,例如Array.prototype.filter
以便它可以在旧版浏览器中运行is我认为这是个好主意。不要听那些仇恨者的胡言乱语。 Mozilla 甚至在 MDN 上向您展示了如何执行此操作。通常建议不要延长Array.prototype
或其他本机原型可能归结为以下之一:
-
for..in
可能无法正常工作
- 其他人可能也想使用相同的函数名扩展 Array
- 即使使用填充程序,它也可能无法在每个浏览器中正常工作。
以下是我的回复:
- 你不需要使用
for..in
通常在数组上。如果你这样做你可以使用hasOwnProperty
以确保它是合法的。
- 仅当您知道自己是唯一这样做的人时才扩展本机OR当它是标准的东西时
Array.prototype.filter
.
- 这很烦人并且咬了我。旧版 IE 有时在添加此类功能时会出现问题。您只需要根据具体情况看看它是否有效。对我来说,我遇到的问题是添加
Object.keys
到 IE7。它似乎在某些情况下停止工作。你的旅费可能会改变。
查看这些参考资料:
- http://perfectionkills.com/extending-native-builtins/ http://perfectionkills.com/extending-native-builtins/
- http://blip.tv/jsconf/jsconf2011-andrew-dupont-everything-is-permissed-extending-built-ins-5211542 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://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter
- https://github.com/kriskowal/es5-shim https://github.com/kriskowal/es5-shim
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)