2

来自 C++ 和 Java,我是 Javascript 的初学者。这个代码模式让我很困惑(在一个 jQuery 应用程序中找到):

var opts = { drop : empty};

function drop(arg){
    opts.drop(arg);
    //do something
}

我将如何阅读:opts创建对象并声明属性drop,但初始化为空。然后,定义函数(-object)drop。在第二行中, opts 对象的 drop-attribute 被称为方法。但是,在我的理解中,opts.drop是空的。所以它不应该是可调用的。

这里会发生什么?我是否遗漏了一些重要的代码,或者这是一种有意义的模式?

编辑:来源:https ://github.com/weixiyen/jquery-filedrop/blob/master/jquery.filedrop.js

4

2 回答 2

5

empty可能是函数的名称,其实现方式如下:

function empty () {}

如果它是null, undefined,一个字符串,一个对象,一个数组等......那么就有理由担心,因为那会很糟糕。

但我的直觉告诉我,如果你寻找它的定义,empty === function () {}

为了增加混淆, ifempty被定义为一个赋值:

var empty = function () {};

该分配必须发生在它被引用的位置之上opts

但是,如果它是一个声明:

function empty () {}

该函数可以在任何地方声明,包括脚本的底部,因为函数声明在脚本中的任何其他内容之前编译。

编辑

快速检查一下,我empty在不同的范围内看到了一些不同的功能。有些正在从数组中删除回调(通过将数组设置为空),有些正在从父元素中删除 HTML 元素,有些正在检查元素是否有任何子元素。

当然,我正在查看此站点的缩小源代码,因此可能还有更多empty功能。

于 2012-09-29T01:05:12.733 回答
1

通过查看这个,我们可以得出结论,empty 不仅仅是一个变量

opts.drop(arg);

这里 drop 实际上被传递了一个参数,所以,

empty是一个接受 1 个参数的函数。

所以var opts = { drop : empty}; // 只不过

var opts = { drop : function(argument) {} };
于 2012-09-29T01:08:25.947 回答