来自C++和Java,我是Javascript的初学者.这个代码模式让我困惑(在jQuery应用程序中找到):
var opts = { drop : empty};
function drop(arg){
opts.drop(arg);
//do something
}
Run Code Online (Sandbox Code Playgroud)
我将如何阅读:opts创建对象并drop声明属性,但初始化为空.然后,drop定义函数(-object).在第二行中,opts对象的drop-attribute被称为方法.但是,根据我的理解,这opts.drop是空洞的.所以它不应该是可调用的.
这里发生了什么?我错过了一些重要的代码,或者这是一个有意义的模式?
编辑:来源:https://github.com/weixiyen/jquery-filedrop/blob/master/jquery.filedrop.js
empty 可能是函数的名称,其实现方式如下:
function empty () {}
Run Code Online (Sandbox Code Playgroud)
如果它是null,undefined一个字符串,一个对象,一个数组等......那么就有理由担心,因为那会很糟糕.
但我的直觉告诉我,如果你寻找它的定义, empty === function () {}
为了增加混淆,if empty定义为赋值:
var empty = function () {};
Run Code Online (Sandbox Code Playgroud)
该任务必须发生在被引用的位置之上opts.
但是,如果这是一个声明:
function empty () {}
Run Code Online (Sandbox Code Playgroud)
该函数可以在任何地方声明,包括脚本的底部,因为函数声明是在脚本中的任何其他内容之前编译的.
编辑
快速检查,我empty在不同的范围看到了一些不同的功能.有些正在从数组中删除回调(通过将数组设置为空数组),有些正在从父项中删除HTML元素,有些正在检查元素是否包含任何子元素.
当然,我正在查看该网站的缩小来源,因此可能会有更多empty功能.