javascript - 为什么我不能直接将 document.getElementById 分配给不同的函数?

标签 javascript

所以我试图定义一个类似于 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/

相关文章:

php - 将 Javascript 放在 .php 文件中有什么好处?

javascript - NodeJS + Express 与 Ajax

javascript - 如何在 Angularjs 中使用 ng-repeat 更改选定的索引项值?

javascript - 如何将值从 href 传递到 input

javascript - 使用javascript从表中提取数据

javascript - 如何在变量中插入动态多行文本框生成的值

javascript - 在 Flow 中过滤 Maybe(可空)类型的数组以删除空值

javascript - Jquery 将来自 asp.net mvc 5 Controller 的 json 放入 js 数组中

javascript - 如何限制我的所有应用程序中的所有文本框条目 - jquery

Javascript promise 链 hell