javascript - 在Javascript中将函数分配给变量并将变量分配给函数(?)

标签 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 这行让我很困惑。看起来它可能是某种命名空间魔法。

我对第一行的思考是否正确?下一行在做什么?

谢谢

最佳答案

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

var trigger = t.trigger 所做的是在 EventManager 函数的范围内声明一个名为 trigger 的变量。在较低的作用域中定义了其他函数,即 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 does 定义了 trigger,这就是 var trigger = t.triggerEventManager 内部工作的原因。同样,行

var isFetchNeeded = t.isFetchNeeded;

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

关于javascript - 在Javascript中将函数分配给变量并将变量分配给函数(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15101357/

相关文章:

javascript - Angular $watch 对象并获取属性名称

php - 在 onClick HTML 事件之后调用 PHP 函数

javascript - Angular JS : Change only clicked button text in ng-repeat

javascript - 使用 CSS/JS 在每一行的开头或结尾附加一些内容?

javascript - Bootstrap 导航栏在单击侧边栏导航列表后隐藏页面部分

php - 在子主题中文件 wc-template-functions.php

javascript - 将参数函数Node.js从一个js传递到另一个

java - "var"变量命名

jquery - AJAX/JQuery - var 不存在

javascript - AngularJS SPA 中 Google Chrome 控制台中的奇怪请求失败