此功能是作为方法分配还是已经执行?

时间:2012-09-29 01:01:52

标签: javascript jquery

来自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

2 个答案:

答案 0 :(得分:5)

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

function empty () {}

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

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

如果增加了混淆,如果将empty定义为作业:

var empty = function () {};

该作业必须发生在opts中引用的位置之上。

但是,如果是宣言:

function empty () {}

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

修改

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

当然,我正在查看此网站的缩小来源,因此可能会有更多empty个功能。

答案 1 :(得分:1)

我们可以得出结论,通过查看

,空不仅仅是一个变量
opts.drop(arg);

这里的drop实际上是通过参数传递的,

是一个接受1个参数的函数..

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

var opts = { drop : function(argument) {} };