所以我试图定义一个类似于 document.getElementById 的函数 g()。以下工作正常:
var g = function(id){return document.getElementById(id)};
但为什么这个更直接的代码不起作用?
var g = document.getElementById;
最佳答案
问题是上下文。当您触发一个对象的函数时,它会以该对象作为 this
的值来触发(除非您另外指定)。 g = document.getElementById
将函数 getElementById
放入变量 g
中,但不设置上下文。
因此,当您运行 g(someId)
时,没有可以运行该函数的上下文。它以全局对象 window
作为 this
的值运行,但这是行不通的。 (准确地说,它不起作用,因为您可以对任何 document
对象进行操作,而不仅仅是 window.document
,而且您还没有指定一个对象。)
您可以通过设置上下文的调用
来解决这个问题:
g.call(document, someId);
但是,这并不是对原始版本的改进!
关于javascript - 为什么我不能直接将 document.getElementById 分配给不同的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318704/