2015-06-14 40 views
1

我正要通過pace.js源和整個下面的函數來了,::理解純JS事件函數

Evented.prototype.trigger = function() { 
    var args, ctx, event, handler, i, once, _ref, _ref1, _results; 
    event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; 
    if ((_ref = this.bindings) != null ? _ref[event] : void 0) { 
    i = 0; 
    _results = []; 
    while (i < this.bindings[event].length) { 
     _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once; 
     handler.apply(ctx != null ? ctx : this, args); 
     if (once) { 
     _results.push(this.bindings[event].splice(i, 1)); 
     } else { 
     _results.push(i++); 
     } 
    } 
    return _results; 
    } 
}; 

現在認識純JS,是有點對我來說是一個挑戰,但我仍通過函數中使用的獨立組件和方法,但我真的無法弄清楚這個函數在插件中做了什麼。

有人可以解釋一下嗎?如果你能給我一個真正的,但一般的想法,這將是足夠好的。

也可以使用此功能獨立於插件pace.js?我插件pace.js似乎是用純js編寫的。

編輯:如果有人能夠評論每條線上發生了什麼,那將是非常友善的,如果您使用的技術術語很好。一旦我知道每條線上隱約發生什麼,我可以稍後提及mdn並理解。我瞭解JS方法和任何與Web API有關的事情,MDN有很多關於它的文檔,但是無論在哪裏,我都會看到event這就是我感到困惑的地方。

+0

代碼的哪些部分你不理解? – Bergi

+0

@Bergi,每個部分都有'event'這個詞。 :) –

+0

@Bergi,但我寧願如果每一行,不包括簡單的(變量聲明等),可以評論:我是否要求太多? :D –

回答

1

你看的代碼被編譯的CoffeeScript代碼,看着原來的代碼更容易理解:

trigger: (event, args...) -> 
    if @bindings?[event] 
     i = 0 
     while i < @bindings[event].length 
     {handler, ctx, once} = @bindings[event][i] 

     handler.apply(ctx ? @, args) 

     if once 
      @bindings[event].splice i, 1 
     else 
      i++ 

源:https://github.com/HubSpot/pace/blob/20a7a70028f51c5e511bcb98be5e116f577faa9f/pace.coffee#L164

它檢查是否存在的一個綁定給定的事件,然後通過任何現有的綁定並調用該事件的處理程序。