修改 insertBefore
Posted
技术标签:
【中文标题】修改 insertBefore【英文标题】:modify insertBefore 【发布时间】:2011-09-16 22:25:24 【问题描述】:有什么方法可以用我自己的函数替换 insertBefore 和类似函数。我的目标是实现一个撤消功能,如果我能够以这种方式实现它,我就不必用我的函数名称更改代码中的每个 insertBefore 实例,这也将使进一步的开发更容易。
我在这里Disable a built-in function in javascript (alert) 找到了类似的东西,但我无法弄清楚如何在我的情况下使用它,因为我不知道谁是这些函数的父级(insertBefore、appendChild 等)。
我只想插入一行代码,然后调用原生代码。
请指教
PS。我正在尝试实现撤消功能,并且该库要求我在该撤消功能中注册撤消以允许重做。所以我想做的就是让一行代码总是在任何 insertBefore 和类似函数之前执行。
我说的不是任何库,只是简单的 ECMAscript。
【问题讨论】:
一些示例代码会对我们有所帮助。你要插入哪一行? 【参考方案1】:如果你说的是Node接口的insertBefore方法,那么能不能做就真的没有意义了。重要的是你不应该。它是一个宿主对象的方法,应该单独放置。
顺便说一下,术语built-in 通常用于表示ECMAScript 的内置对象和方法。 window.alert 方法被更准确地描述为一个宿主对象的方法 并且真的不应该被篡改(尽管通常它可以被篡改)。
【讨论】:
你能解释一下为什么它不应该被篡改吗?是因为它可能会意外影响页面的其余部分吗? 在Node的原型中加入insertBefore_mine等类似的功能,而不是替换原来的,这样可以吗? 我听取了您的建议并为 DOM 操作实现了一个单独的接口,但我仍然很想知道您提出建议的原因。 宿主对象本身就是一个法则,它们定义了接口但没有实现。 Kangax 对why host objects should not be extended 有很好的解释。即使在封闭或受控的环境中,根据特定实现的功能可能会限制用户代理的未来选择,因此即使这样也不是一个好主意。以上是关于修改 insertBefore的主要内容,如果未能解决你的问题,请参考以下文章