gpt4 book ai didi

javascript - 通过原型(prototype)扩展 JavaScript 中的原生元素?

转载 作者:行者123 更新时间:2023-11-29 22:39:49 24 4
gpt4 key购买 nike

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

我担心实现 addClassName 之类的东西并使其在未来以一种我无法解决的方式发生冲突,除了重写软件并要求模块作者做同样的事情之外我无法解决。

最佳答案

我不会,因为恕我直言,它肯定会迟早发生碰撞并产生很难被发现的潜在错误。

无论如何,我确实扩展了一些基本简单原生 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 的浏览器上运行您的 web 应用程序时,它可能会导致您的 web 应用程序不再按预期工作,并尝试找出错误!!!

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

关于javascript - 通过原型(prototype)扩展 JavaScript 中的原生元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3577571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com