gpt4 book ai didi

javascript - .getElementById() 最初附加到什么对象?

转载 作者:行者123 更新时间:2023-11-28 11:18:25 25 4
gpt4 key购买 nike

我想修改负责 .getElementById() 的任何对象的原型(prototype)

我知道 document 没有原型(prototype),那么 .getElementById() 实际附加到了什么对象?

编辑:事实证明文档确实有原型(prototype)(感谢凯文)。我觉得自己很傻。

最佳答案

文档没有原型(prototype)是错误的。

关于getElementById方法,我不知道规范要说什么,但是Safari和Firefox之间的位置不同,所以应该将其视为实现细节。 不要依赖定义的位置。您始终可以直接在文档上覆盖它。

也就是说,我进行了调查,在 Firefox 8.0 上,该方法是在 document 的原型(prototype)上定义的:

◀ Object.getPrototypeOf(document).hasOwnProperty("getElementById")
▶ true
◀ Object.getPrototypeOf(document)
▶ [xpconnect wrapped native prototype]

在 Safari 上(因此可能还有 Chrome 和其他 WebKit 衍生产品),它位于 document 的原型(prototype)的原型(prototype)上:

› document.hasOwnProperty("getElementById")
false
› Object.getPrototypeOf(document).hasOwnProperty("getElementById")
false
› Object.getPrototypeOf(Object.getPrototypeOf(document)).hasOwnProperty("getElementById")
true
› Object.getPrototypeOf(document)
HTMLDocumentPrototype
› Object.getPrototypeOf(Object.getPrototypeOf(document))
DocumentPrototype

您可以使用浏览器的对象检查器查找原型(prototype)链,或使用 Object.getPrototypeOfhasOwnProperty 进行自己的研究。

<小时/>

要覆盖 document.getElementById 同时保留原始内容,请执行以下操作:

var originalGEID = document.getElementById;
document.getElementById = function (id) {
...
var originalElement = originalGEID.call(document, id);
...
};

请注意,无论原始方法位于原型(prototype)链中的哪个位置,此操作都会进行。

关于javascript - .getElementById() 最初附加到什么对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9216273/

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