$ .Callbacks()。disable()vs $ .Callbacks()。lock()
两者的jQuery文档基本上都说明了同样的事情,所以我想知道两者之间是否存在任何重大差异(如果有的话)。 谢谢!
关于这个的文档实际上非常糟糕,所以这是我通过研究源代码找到的:
lock
仅阻止将来的fire
呼叫,但不会阻止add
function。
以下是方法的快速概述:
-
empty
– 删除到目前为止已注册的任何回调。 -
lock
– 阻止进一步的fire
调用,但允许add
更多的回调。 -
disable
– 禁止进一步调用fire
和add
。
要理解这一切,让我们从memory
标志的解释开始:
如果使用memory
标志构造回调对象,它将跟踪最后一次fire
调用,并且将立即调用稍后添加的任何回调。 这是一个例子 :
var callbacks = $.Callbacks('memory'); callbacks.add(function(){ console.log('first'); }); callbacks.fire(); callbacks.add(function(){ console.log('second'); });
这也将记录第二 ,即使它是在fire
之后添加的。
如果你disable
它,它将完全擦除内存。 这是另一个例子 :
var callbacks = $.Callbacks('memory'); callbacks.add(function(){ console.log('first'); }); callbacks.fire(); callbacks.disable(); callbacks.add(function(){ console.log('second'); }); callbacks.fire();
这只会先记录,因为在添加第二个函数之前已禁用callbacks
。
但是,如果您使用lock
它, 则会调用稍后添加的函数。 这是另一个例子 :
var callbacks = $.Callbacks('memory'); callbacks.add(function(){ console.log('first'); }); callbacks.fire(); callbacks.lock(); callbacks.add(function(){ console.log('second'); }); callbacks.fire();
这也是第二次 ,但只有一次; 由于对象被lock
,因此将忽略对fire
任何进一步调用。