了解Cranium.js代码

Understanding Cranium.js code

本文关键字:代码 js Cranium 了解      更新时间:2023-09-26

我在读Cranium.js(https://gist.github.com/addyosmani/3769967)Addy Osmani和我的代码无法理解两行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];
                        }

那就是:我理解如果,我不明白的是花括号里发生了什么。在我看来(但我可能错了),如果左边的表达式为真,什么都不会发生,否则他会删除Cranium.Events.channels[topic]

我不明白的第二句话是:

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

我不懂双减号。

欢迎发表评论。

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;中,--在应用它之前是从Cranium.Events.eventNumber中减去1。因此,如果之前是3,那么当它被添加到events时,它将是2。