为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

qq_花开花谢_0 2019-07-24 20:03:26
JavaScript:扩展Array.prototype有什么危险?谷歌JavaScript风格指南建议不要扩展Array.prototype。但是,我Array.prototype.filter = Array.prototype.filter || function(...) {...}在浏览器中使用它(和类似方法)的方式不存在。MDN实际上提供了类似的例子。我知道Object.prototype问题,但Array不是哈希表。扩展时会出现什么问题,这会让Array.prototypeGoogle提出反对意见?
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

大多数人都错过了这一点。在我看来,填充或填充标准功能,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。它似乎在某些情况下停止工作。你的旅费可能会改变。

看看这些参考文献:


查看完整回答
反对 回复 2019-07-24
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我将从Nicholas Zakas的优秀文章中给出关键句子的要点。可维护的JavaScript:不要修改你不拥有的对象

  • 可靠性:“简单的解释是企业软件产品需要一致且可靠的执行环境才能维护。”

  • 不兼容的实现:“修改您不拥有的对象的另一个危险是命名冲突和不兼容的实现的可能性。”

  • 如果每个人都这样做怎么办 :“简单地说:如果团队中的每个人都修改了他们不拥有的对象,那么很快就会遇到命名冲突,不兼容的实现和维护噩梦。”

基本上,不要这样做。即使您的项目永远不会被其他任何人使用,并且您永远不会导入第三方代码,也不要这样做。你会建立一种可怕的习惯,当你开始尝试与他人玩耍时,这种习惯很难打破。


查看完整回答
反对 回复 2019-07-24
  • 3 回答
  • 0 关注
  • 578 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号