0

Addy Osmani によるCranium.js ( https://gist.github.com/addyosmani/3769967 ) コードを読んでいましたが、2 行の JavaScript が何をするのか理解できませんでした。コード全体は次のとおりです。

// Mix in to any object in order to provide it with custom events.
var Events = Cranium.Events = {
        channels: {},
        eventNumber: 0,
        trigger: function (events, data) {
            for (var topic in Cranium.Events.channels){
                if (Cranium.Events.channels.hasOwnProperty(topic)) {
                    if (topic.split("-")[0] == events){
                        Cranium.Events.channels[topic](data) !== false || delete Cranium.Events.channels[topic];
                    }
                }
            }
        },
        on: function (events, callback) {
            Cranium.Events.channels[events + --Cranium.Events.eventNumber] = callback;
        },
        off: function(topic) {
            delete Cranium.Events.channels[topic];
        }            
};

私が理解していない最初の行は次のとおりです。

if (topic.split("-")[0] == events){
                            Cranium.Events.channels[topic](data) !== false || delete Cranium.Events.channels[topic];
                        }

つまり、中括弧内で何が起こっているのかがわかりません。左の式が true の場合は何も起こらず、そうでない場合はCranium.Events.channels[topic].

私が理解していない2行目は次のとおりです。

Cranium.Events.channels[events + --Cranium.Events.eventNumber] = callback;

二重マイナス記号がわかりません。

どんなコメントでも大歓迎です。

4

1 に答える 1

3
if (topic.split("-")[0] == events){
    Cranium.Events.channels[topic](data) !== false || delete Cranium.Events.channels[topic];
}

と同じです

if (topic.split("-")[0] == events){
    if ( Cranium.Events.channels[topic](data) === false ) {
        delete Cranium.Events.channels[topic];
    }
}

そして、Cranium.Events.channels[events + --Cranium.Events.eventNumber] = callback;それを適用する前に--から 1 を引いています。Cranium.Events.eventNumberですから、前が 3 だった場合、 に追加されるので 2 になりeventsます。

于 2013-07-07T08:17:25.620 に答える