【问题标题】:Is there something wrong with extending native Javascript prototypes?扩展原生 Javascript 原型有什么问题吗?
【发布时间】:2011-08-11 04:25:18
【问题描述】:

我看到有些人对用 Javascript 扩展原生原型不屑一顾。由于语法方便,我正在考虑这样做。即

function(array, element)

写起来更麻烦,可读性更差
array.function(element)

但第二个只能通过扩展Array 原型来实现(AFAIK)。扩展本机原型有什么问题吗?以后会以某种方式困扰我吗?

【问题讨论】:

标签: javascript


【解决方案1】:

它可能会与尝试执行相同操作的其他库发生冲突。

它可能与添加到本机对象的未来方法发生冲突。

如果有人在没有适当的hasOwnProperty() 检查的情况下使用for (var i in array),他们的代码可能/很可能会中断,因为新方法可能会出现在旧浏览器的迭代中。

【讨论】:

  • 你的意思是没有正确的hasOwnProperty检查?
  • 但是您可以随时检查它是否已经存在,以防止冲突并使其面向未来。例如。如果我想将 foo 添加到 Array 原型中,我会首先检查 if(Array.foo)
  • @Peter Of The Corn - 如果您知道您的方法与新的内置方法具有完全相同的实现,您只能检查它是否已经存在并推迟到内置方法。这对于已经在较新的浏览器中引入的方法是安全的,但对于尚不存在的方法是不可行的,因为您可能会推迟使用与您编写和测试应用程序的方法不同的内置方法.
  • 最新的 ECMA 规范在一定程度上缓解了覆盖方法的问题。所以库分配Array.foo 并且当正确完成for(var i in Array) 将不会显示属性fooArray.foo=bar 会产生错误。我知道现在并非所有浏览器都支持这一点,但考虑到一段时间后,这个特定的论点可能会更轻。
  • @qw3n - 您可能想要支持的所有浏览器都需要很长时间才能拥有该 ECMA 功能。因此,您必须确保没有人不安全地迭代数组。我们在这里谈论风险。我不是说你做不到,只是讨论风险是什么。
猜你喜欢
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 2011-09-25
  • 2012-12-09
  • 1970-01-01
  • 2021-01-27
  • 2017-01-15
  • 1970-01-01
相关资源
最近更新 更多