Javascript 使用document.getElementById作为一级函数
作为一种函数式编程语言,JavaScript允许如下语句Javascript 使用document.getElementById作为一级函数,javascript,dom,functional-programming,Javascript,Dom,Functional Programming,作为一种函数式编程语言,JavaScript允许如下语句 var obj = { key: function () {return true;} }; var fn = obj.key; 这很简单,但为什么不起作用呢 $ = document.getElementById; 赋值本身不会引发任何错误,但尝试使用$函数会引发Chrome中的未捕获类型错误:非法调用。您必须将其声明为函数,并指定需要的参数: var $ = function(id){ return document.ge
var obj = {
key: function () {return true;}
};
var fn = obj.key;
这很简单,但为什么不起作用呢
$ = document.getElementById;
赋值本身不会引发任何错误,但尝试使用
$
函数会引发Chrome中的未捕获类型错误:非法调用。您必须将其声明为函数
,并指定需要的参数:
var $ = function(id){
return document.getElementById(id);
};
getElementById
是一种需要将上下文(this
)设置为document
才能正常工作的方法
一种方法是使用
fn = document.getElementById;
fn.call(document, 'some-id');
或者您可以使用ES5功能bind
(这将修复上下文),如下所示:
fn = document.getElementById.bind(document);
fn('some-id');
或者您也可以自己完成bind
最终要做的事情:
fn = function (id) {
return document.getElementById(id);
};
fn('some-id');
JavaScript在将方法作为常规函数处理和动态地为方法提供调用上下文方面有很大的不同。您甚至可以通过使用函数本身的call
或apply
方法来覆盖this
。函数本身就是一个具有方法的对象,这些方法继承自function.prototype)。我不想寻找解决方案,我问的是禁止将getElementById函数赋值给变量的语言规范