"document.getElementById() "函数存放在哪里?

问题描述 投票:0回答:1

我想知道这个函数存放在哪里?

我之所以这么问,是因为我试着在 console.dir(document)里面查找,但在那里找不到任何方法。

我对这个问题非常好奇。谢谢!我想知道那个函数存放在哪里?

html dom
1个回答
2
投票

这个方法是作为 DocumentPrototype 对象,可在 window.Document.prototype:

负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: window.document 实例只从 Document 类。

console.log( Document.prototype.getElementById );

Document.prototype.getElementById = (val) => 'gotcha ' + val;
console.log( document.getElementById( 'foo' ) );

现在,原生函数作为一个原生函数,浏览器不给我们访问它的机会,当然,它甚至不是一个JS函数。


1
投票

它将依赖于浏览器中的本地代码(可能是C++)。你可以在浏览器的源代码中搜索getElementById来查看。

JavaScript是一种解释语言;每个网络浏览器都有一个JavaScript解释器。当你自己编写JavaScript时,你可以在对象上定义方法。然而,你不能从JavaScript中做的是编写本地方法;这些方法必须作为浏览器的一部分提供。如果你试着用toSource从JavaScript中打印这些函数的源代码,你会看到一个说明,表明这些函数实际上是原生的。

console.log((function(){}).toSource());
console.log(alert.toSource());

原生代码的意义在于,它可以访问JS代码刻意无法访问的东西。例如,事件可以用 window.setTimeout 尽管完全没有办法实现 setTimeout 在纯JS中。浏览器有庞大的代码库,我对这些代码库都不熟悉,所以很难用一个简短的答案来表达它们的具体工作原理。不过,为了让你了解它们的工作原理。Chromium的元素.cc 中包含了一些熟悉的方法,比如 setAttribute在container_node.cc中 中有一个 getElementById.

© www.soinside.com 2019 - 2024. All rights reserved.