所以我试图定义一个类似于document.getElementById的函数g().以下工作正常:
var g = function(id){return document.getElementById(id)};
Run Code Online (Sandbox Code Playgroud)
但为什么这个更直接的代码不起作用呢?
var g = document.getElementById;
Run Code Online (Sandbox Code Playgroud)
lon*_*day 13
问题在于背景.当您触发对象的函数时,它将以对象作为值触发this(除非您另行指定). g = document.getElementById将函数getElementById放入变量g,但不设置上下文.
因此,在运行时g(someId),没有可以运行该函数的上下文.它以全局对象window作为值运行this,但不起作用.(确切地说,它不起作用,因为您可以使用任何document对象操作,而不仅仅是window.document,并且您没有指定一个.)
您可以call在设置上下文的地方解决这个问题:
g.call(document, someId);
Run Code Online (Sandbox Code Playgroud)
但是,这不是原来的改进!