6

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

4

1 回答 1

10

这方面的文档实际上非常糟糕,所以这是我通过研究源代码发现的:

lock只阻止未来的fire调用,但不阻止函数被add编辑。


以下是这些方法的简要介绍:

  • 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');
});

这也会记录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();

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


但是,如果您改用它,则将lock调用稍后添加的函数。这是另一个例子

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

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

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

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

callbacks.fire();

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

于 2012-09-03T19:05:33.643 回答