来自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
答案 0 :(得分:5)
empty
可能是函数的名称,其实现方式如下:
function empty () {}
如果它是null
,undefined
,一个字符串,一个对象,一个数组等......那么就有理由担心,因为那会很糟糕。
但我的直觉告诉我,如果你寻找它的定义,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) {} };