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

时间:2012-09-03 18:43:05

标签: jquery

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

1 个答案:

答案 0 :(得分:10)

关于这个的文档实际上非常糟糕,所以这是我在studying the source code找到的内容:

lock仅阻止未来的fire来电,但不会阻止功能add


以下是方法的快速概述:

  • empty - 删除目前为止注册的所有回调。
  • lock - 阻止进一步调用fire,但允许更多回调add
  • disable - 阻止进一步调用fire& add

要理解这一切,我们首先解释一下the memory flag

如果使用memory标志构造回调对象,它将跟踪最后fire次呼叫,并且将立即调用稍后添加的任何回调。这是an example

var callbacks = $.Callbacks('memory');

callbacks.add(function(){
    console.log('first');
});

callbacks.fire();

callbacks.add(function(){
    console.log('second');
});

这也会记录 第二 ,即使它是在fire来电后添​​加的。


如果你disable,它会完全擦除内存。这是another example

var callbacks = $.Callbacks('memory');

callbacks.add(function(){
    console.log('first');
});

callbacks.fire();
callbacks.disable();

callbacks.add(function(){
    console.log('second');
});

callbacks.fire();

这只会记录 第一个 ,因为在添加第二个功能之前已禁用callbacks


但是,如果您使用lock,则稍后会添加添加的功能。这是another example

var callbacks = $.Callbacks('memory');

callbacks.add(function(){
    console.log('first');
});

callbacks.fire();
callbacks.lock();

callbacks.add(function(){
    console.log('second');
});

callbacks.fire();

这也会记录 ,但只记录一次;由于对象是lock,因此对fire的任何进一步调用都将被忽略。