6

両方のjQueryドキュメントは基本的に同じことを述べているので、2つの間に大きな違いがあるかどうか疑問に思いました。ありがとう!

4

1 に答える 1

10

これに関するドキュメントは実際には本当に悪いので、ソースコードを調べて見つけたものは次のとおりです。

lock将来の呼び出しを防ぐだけで、関数の編集fireを妨げることはありません。add


メソッドの概要は次のとおりです。

  • empty-これまでに登録されたコールバックをすべて削除します。
  • lock-へのそれ以上の呼び出しを防ぎますfireが、より多くのコールバックをadd編集できます。
  • disablefire- &の両方へのそれ以上の呼び出しを防ぎますadd

これをすべて理解するためにmemoryフラグの説明から始めましょう:

コールバックオブジェクトがmemoryフラグを使用して構築されている場合、最後の呼び出しを追跡し、fire後で追加されたコールバックはすぐに呼び出されます。次に例を示します。

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

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

callbacks.fire();

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

これは、呼び出し後に追加された場合でも、2番目にログに記録されfireます。


disableただし、それを行うと、メモリが完全に消去されます。別の例を次に示します。

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

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

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

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

callbacks.fire();

2番目の関数が追加される前に無効にされているため、これは最初にのみログに記録されます。callbacks


ただし、lock代わりに使用すると、後で追加された関数呼び出されます。別の例を次に示します。

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

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

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

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

callbacks.fire();

これも2番目にログに記録されますが、1回だけです。オブジェクトがlock編集されたため、それ以降の呼び出しはfire無視されます。

于 2012-09-03T19:05:33.643 に答える