1

Addy Osmani の pub sub メソッドを使用しています。

var topics = {};

jQuery.Topic = function( id ) {
    var callbacks,
        topic = id && topics[ id ];
    if ( !topic ) {
        callbacks = jQuery.Callbacks();
        topic = {
            publish: callbacks.fire,
            subscribe: callbacks.add,
            unsubscribe: callbacks.remove
        };
        if ( id ) {
            topics[ id ] = topic;
        }
    }
    return topic;
};

しかし、プロジェクトに追加する前に、もう少し理解したいと思います。私が見たことのない1行を除いて、それはかなり単純です: topic = id && topics[ id ];

topic = idわかった。ここで && 演算子は何をしていますか? トピック配列に id を追加していますか? または比較を行いますか?

4

2 に答える 2

4
topic = id && topics[ id ]; 

次のように読む必要があります

topic = (id && topics[ id ]);

&&MDNドキュメントに記載されているように、優先順位が高くなります

に割り当てられた値topicは、が「真」の値として評価されtopic[id]たときです。それ以外の場合は、次のようになります。idfalse

if (id) {
   topic = topics[id];
}
else {
   topic = false;
}
于 2012-07-02T13:07:08.453 に答える
0

上記は、jQuery.Callbacks() の jQuery ドキュメント ページの Pub/Sub の例です。 https://api.jquery.com/jQuery.Callbacks/

この例が何をするかの要約を書きましたが、すぐにはわかりませんでした。


Topic() は、名前が変更された 3 つの関数オブジェクト (callbacks.fire、callbacks.add、callbacks.remove) を含むトピック オブジェクトを返す関数です。

topic オブジェクトには、publish、subscribe、unsubscribe に名前が変更された 3 つの関数オブジェクトが含まれています。

id は、pubSub チャネルを識別する一意の文字列を指します。例: "mailArrived"、"mailSent"

トピック オブジェクト (複数形) には、id をキーとするトピック オブジェクトが含まれます。その ID を持つトピック オブジェクトが存在するかどうかを判断するために使用されます。

Topic() は、id が false (未定義、null、NaN、0、""、または false) でないかどうかをチェックします。

id が true で、その id のトピックがトピックに存在する場合、トピック オブジェクトに topic[id] が割り当てられて返されます。

id が true で、その id のトピックがトピックに存在しない場合、新しいトピック オブジェクトが作成され、topics[id] としてトピックに配置され、返されます。

id が false の場合、新しいトピック オブジェクトが作成されて返されますが、トピックには配置されません。

トピック オブジェクトが作成されるたびに、新しい jQuery コールバック リストの一意の値に対してクロージャーが作成されます。

于 2014-02-22T17:18:58.997 に答える