$ .Callbacks()。disable()vs $ .Callbacks()。lock()

两者的jQuery文档基本上都说明了同样的事情,所以我想知道两者之间是否存在任何重大差异(如果有的话)。 谢谢!

关于这个的文档实际上非常糟糕,所以这是我通过研究源代码找到的:

lock仅阻止将来的fire呼叫,但不会阻止addfunction。


以下是方法的快速概述:

  • empty – 删除到目前为止已注册的任何回调。
  • lock – 阻止进一步的fire调用,但允许add更多的回调。
  • disable – 禁止进一步调用fireadd

要理解这一切,让我们从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任何进一步调用。