将函数赋值给变量并将变量赋值给Javascript中的函数(?)

时间:2013-02-26 23:17:08

标签: javascript function var

我正在通过解析我之前使用的其他人编写的一些脚本来学习javascript(stackoverflow对此至关重要!)。这段代码(我从中间切了很多,以使代码更容易阅读,所有评论都是我的)来自fullCalendar.js,一个jquery插件。

我不确定作者在这里做了什么:

function EventManager(options, _sources) { //called using .call()
    var t = this;

    t.isFetchNeeded = isFetchNeeded;  //?? assign the function "isFetchNeeded" to the variable (not the value returned by the function)??

    var trigger = t.trigger;    //?? namespace??
}

function View(element, calendar, viewName) {
    var t = this;   

    function trigger(name, thisObj) {
        return calendar.trigger.apply(
                 calendar,
                 [name, thisObj || t].concat(Array.prototype.slice.call(arguments, 2), [t])
        );
    }
}

首先,我的猜测是this.foo=bar将函数“bar”分配给当前对象中名为“isFetchNeeded”的变量(还不确定为什么要这样做。速度?)。

其次,var foo=this.bar行让我难过。看起来它可能是一些命名空间魔法。

我在考虑第一行时是否正确?什么是下一行呢?

由于

2 个答案:

答案 0 :(得分:1)

this.foo = barbar(无论它可能是什么)的值分配给名为foo的对象成员。这确实可以是函数定义以及许多其他内容。

var trigger = t.trigger所做的是在trigger函数的范围内声明名为EventManager的变量。在较低范围内定义了其他函数,即pushLoadingpopLoading。这些不是对象成员,因此在这些函数中使用this.trigger将不起作用。 var trigger声明使它可以在这些函数中访问。

我并不认为自己与最好的JS程序员有任何关系,所以我不能说他所做的事情是否有意义,但你可以看到EventManager.js是如何实际使用的(在Calendar.js中):

EventManager.call(t, options, eventSources);
var isFetchNeeded = t.isFetchNeeded;
var fetchEvents = t.fetchEvents;

他实际上并没有创建EventManager对象,但是他使用Calendar对象调用其构造函数。 Calender 定义了trigger,这就是var trigger = t.triggerEventManager内工作的原因。同样,行

var isFetchNeeded = t.isFetchNeeded;

Calendar.js中获取isFetchNeeded方法“退出”EventManager并允许在Calendar范围内调用。

答案 1 :(得分:0)

变量this引用调用函数的上下文。在这种情况下(假设代码在Web浏览器中运行)是window对象。第一行简单地将函数isFetchNeeded指定为this对象的方法。第二行将this的成员变量trigger的值分配给函数EventManager的本地变量。