当前位置: 首页 > 面试题库 >

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

刘琨
2023-03-14
问题内容

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

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

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


问题答案:

大多数人都错过了这一点。我认为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中的问题。在某些情况下,它似乎停止工作。你的旅费可能会改变。

祝好运!



 类似资料:
  • 扩展是可定制化浏览体验的小程序,它们使用户可以根据个人需要或者偏好定制 Chrome 的功能和行为。它们基于 Web 技术(例如 HTML,JavaScript 和 CSS)构建。 扩展必须满足狭义定义且易于理解的单一目的(译者注:功能简单易懂化)。一个扩展可以包括多个组件和一系列功能,只要所有的内容都有助于实现共同的目标。 用户交互界面应尽量小且有意图。他们的范围从简单的图标,如右侧显示的 Go

  • 问题内容: 用Java导入和扩展类有什么区别 问题答案: 那是两件事。 导入一个类是为了使您可以使用该类,而无需在要编写的当前类中限定全名。 扩展类是创建一个新类,该新类是某个其他类的子类。这将允许您添加或更改要扩展的类的功能。

  • 问题内容: 我想在AJAX和常规HTTP调用之间共享一个模板,唯一的区别是一个模板需要与base.html html一起提供,而另一个则不需要。 任何想法? 问题答案: 使用变量。 然后在您的视图中将其设置为“ base.html”,或者将其设置为一个新的“ ajax.html”文件,该文件仅提供该阻止,而没有其他内容。

  • 问题内容: 我想在我的JS代码中扔一些东西,我希望它们是Error的instanceof,但我也想让它们成为其他东西。 在Python中,通常将Exception子类化。 在JS中适合做些什么? 问题答案: 在ES6中:

  • 我知道一些关于AbstractQueuedSynchronizer的详细信息。它是一个用于创建依赖于状态的类或同步器的框架。但我不理解在ThreadPoolExecutor的Worker中扩展这个类的意义。 由Worker类的签名可以推断出以下内容: > 提交新的可运行/可调用任务时,将创建一个新的工作对象。 Worker的新对象可以被视为新线程。 方法将添加新的worker(或只是一个任务)并在

  • 问题内容: 我正在准备考试,但有一个问题,希望这里有人可以回答我。 关于RMI和远程对象。我不知道为什么这两个实现之间有如此大的差异。一种是扩展UnicastRemoteObject,而另一种是将对象导出为UnicastRemoteObject。 我真的没有区别 接口: 这是服务器代码(版本1): 这将是版本2: 我的问题是:两者之间有什么区别? 在第一个版本中,显式创建了注册表,此外,在重新绑定