作为一种函数式编程语言,JavaScript允许使用
之类的语句var obj = {
key: function () {return true;}
};
var fn = obj.key;
很简单,但为什么这不起作用?
$ = document.getElementById;
分配本身不会引发任何错误,但尝试使用$
函数会在Chrome中引发Uncaught TypeError: Illegal invocation
。
答案 0 :(得分:2)
getElementById
是一种需要设置为this
的上下文(document
)才能按预期工作的方法。
一种方法是使用
调用它fn = document.getElementById;
fn.call(document, 'some-id');
或者您可以使用ES5 fumction bind
(这将修复上下文),如下所示:
fn = document.getElementById.bind(document);
fn('some-id');
或者你可以自己做bind
最终做的事情:
fn = function (id) {
return document.getElementById(id);
};
fn('some-id');
JavaScript在处理常规函数方法和非常动态地为方法提供调用上下文方面有很大的不同。您甚至可以使用函数本身的this
或call
方法覆盖apply
(甚至函数是具有方法的对象,这些方法继承自Function.prototype)。
答案 1 :(得分:0)
您必须将其声明为function
并指定您需要的参数:
var $ = function(id){
return document.getElementById(id);
};