我想知道这个函数存放在哪里?
我之所以这么问,是因为我试着在 console.dir(document)里面查找,但在那里找不到任何方法。
我对这个问题非常好奇。谢谢!我想知道那个函数存放在哪里?
这个方法是作为 DocumentPrototype
对象,可在 window.Document.prototype
:
负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: window.document
实例只从 Document
类。
console.log( Document.prototype.getElementById );
Document.prototype.getElementById = (val) => 'gotcha ' + val;
console.log( document.getElementById( 'foo' ) );
现在,原生函数作为一个原生函数,浏览器不给我们访问它的机会,当然,它甚至不是一个JS函数。
它将依赖于浏览器中的本地代码(可能是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
.