2013-07-07 116 views
0

我正在閱讀Addy Osmani的Cranium.js(https://gist.github.com/addyosmani/3769967)代碼,我無法理解JavaScript的兩行代碼。整個代碼如下:瞭解Cranium.js代碼

// 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; 

我不明白的雙減號。

任何意見表示讚賞。

+1

所以你的問題是更通用的「** **和** - **是什麼意思?」 - 首先是正常的'OR' taht在這種情況下轉換爲正常的'if'子句,因爲左邊的操作是布爾型的,第二個與'Cranium.Events.eventNumber = Cranium.Events.eventNumber - 1'相同。 ,但是因爲它在後面,'--Cranium.Events.eventNumber'而不是'Cranium.Events.eventNumber - '它將首先計數並在操作後給你數字。 – balexandre

+0

也許,我不明白的是大局:也就是說,我不明白他爲什麼要進行這種減法。謝謝:-) – ContentiousMaximus

回答

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;--Cranium.Events.eventNumber應用之前減去1。所以,如果它以前是3,那麼它將被添加到events

+0

你的第二個'if'缺少'=== false'檢查。最初的回調可能會返回undefined,0或其他falsy值而不會觸發delete。 – DCoder

+0

你是對的。我已經更新了我的答案。 – kalley