通过原型扩展JavaScript中的原生元素?

时间:2010-08-26 17:09:26

标签: javascript dom prototype element

你会考虑通过原型危险扩展原生元素吗?我看到一些像Prototype这样的框架,所以我开始怀疑我是否也敢这样做。

我担心像addClassName这样的事情,并且在将来会以一种我无法解决的方式发生冲突,除了重写软件并要求模块作者做同样的事情。

1 个答案:

答案 0 :(得分:2)

我不会因为恕我直言,它可能会很快或很快发生碰撞并造成一个很难被发现的潜在错误。

我还是扩展了一些基本的简单原生Javascript对象,比如String.trim,无论如何我总是小心翼翼地通过使用简单的if测试来测试它是否已经存在:

if(!String.prototype.trim)
   String.prototype.trim = function() { return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); }

您可以使用addClassName执行相同操作。 不同之处在于使用像String.trim这样的简单函数来实现它,很难在未来导致问题,因为即使浏览器引擎已经有了String.trim(实际上FF已经有了),这样的函数也正好要做我的String.trim做了什么,所以你不会看到你的Web应用程序工作流程的差异。

更复杂的函数(如覆盖querySelectorAll)可能会导致浏览器实现它与实现之间的差异。例如:返回的元素的顺序可能不同,浏览器函数返回一个集合,而一个集合是一个数组,以及其他问题。因此,当您在实现querySelectorAll的浏览器上运行webapp时,可能会导致您的webapp不再按预期工作,并尝试找出错误!

也许querySelectorAll不是最好的例子,但我希望我解释了这个概念。