您会考虑通过危险的原型扩展原生元素吗?我看到一些框架(例如 Prototype)这样做,所以我开始怀疑我是否也敢这样做。
我担心实现像 addClassName 这样的东西,并使其在未来发生冲突,除了重写软件并要求模块作者做同样的事情之外,我无法通过任何其他方式解决。
我不会,因为恕我直言,它肯定会很快或以后发生冲突,并产生一个很难被发现的潜在错误。
无论如何我确实延长了一些基本简单像 String.trim 这样的原生 Javascript 对象,无论如何,我总是小心地使用简单的 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 的浏览器上运行 Web 应用程序时,可能会导致您的 Web 应用程序不再按预期工作,并尝试找出错误!
也许 querySelectorAll 不是最好的例子,但我希望我解释了这个概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)