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

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

谷歌JavaScript风格指南建议不要扩展Array.prototype。但是,我Array.prototype.filter = Array.prototype.filter || function(...) {...}在浏览器中使用它(和类似方法)的方式不存在。MDN实际上提供了类似的例子

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

扩展时会出现什么问题,这会让Array.prototypeGoogle提出反对意见?


qq_花开花谢_0
浏览 579回答 3
3回答

繁花如伊

大多数人都错过了这一点。在我看来,填充或填充标准功能,Array.prototype.filter以便它在旧浏览器中工作是一个好主意。不要听仇恨。Mozilla甚至会向您展示如何在MDN上执行此操作。通常,不扩展Array.prototype或其他原生原型的建议可能归结为以下之一:for..in 可能无法正常工作其他人可能也想要使用相同的函数名扩展Array它可能无法在每个浏览器中正常工作,即使使用垫片也是如此。以下是我的回复:您通常不需要for..in在Array上使用。如果你这样做,你可以hasOwnProperty用来确保它是合法的。只有当你知道自己是唯一一个这样做的人或者当它是标准的东西时,才会扩展本地人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-5211542https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filterhttps://github.com/kriskowal/es5-shim

宝慕林4294392

我将从Nicholas Zakas的优秀文章中给出关键句子的要点。可维护的JavaScript:不要修改你不拥有的对象:可靠性:“简单的解释是企业软件产品需要一致且可靠的执行环境才能维护。”不兼容的实现:“修改您不拥有的对象的另一个危险是命名冲突和不兼容的实现的可能性。”如果每个人都这样做怎么办 :“简单地说:如果团队中的每个人都修改了他们不拥有的对象,那么很快就会遇到命名冲突,不兼容的实现和维护噩梦。”基本上,不要这样做。即使您的项目永远不会被其他任何人使用,并且您永远不会导入第三方代码,也不要这样做。你会建立一种可怕的习惯,当你开始尝试与他人玩耍时,这种习惯很难打破。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript