使用document.getElementById作为第一类函数

时间:2013-12-24 02:05:39

标签: javascript dom functional-programming

作为一种函数式编程语言,JavaScript允许使用

之类的语句
var obj = {
    key: function () {return true;}
};
var fn = obj.key;

很简单,但为什么这不起作用?

$ = document.getElementById;

分配本身不会引发任何错误,但尝试使用$函数会在Chrome中引发Uncaught TypeError: Illegal invocation

2 个答案:

答案 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在处理常规函数方法和非常动态地为方法提供调用上下文方面有很大的不同。您甚至可以使用函数本身的thiscall方法覆盖apply(甚至函数是具有方法的对象,这些方法继承自Function.prototype)。

答案 1 :(得分:0)

您必须将其声明为function并指定您需要的参数:

var $ = function(id){
return document.getElementById(id);
};