2014-10-04 42 views
2

我不明白在下面的JavaScript代碼片段中每行代碼都在做什麼。據我所知,它正在閱讀該人是否進入或逃離。但我想知道第2,3,6,10,16和18行正在做什麼。JavaScript的這個片段在做什麼?

var okCancelEvents = function (selector, callbacks) { 
    var ok = callbacks.ok || function() {}; 
    var cancel = callbacks.cancel || function() {}; 

    var events = {}; 
    events['keyup '+selector+', keydown '+selector+', focusout '+selector] = 
    function (evt) { 
     if (evt.type === "keydown" && evt.which === 27) { 
     // escape = cancel 
     cancel.call(this, evt); 

     } else if (evt.type === "keyup" && evt.which === 13) { 
     // blur/return/enter = ok/submit if non-empty 
     var value = String(evt.target.value || ""); 
     if (value) 
      ok.call(this, value, evt); 
     else 
      cancel.call(this, evt); 
     } 
    }; 

    return events; 
}; 

回答

2

VAR OK = callbacks.ok || function(){};

如果callbacks.ok未定義,則創建一個stub函數。 http://en.wikipedia.org/wiki/Method_stub並設置ok到參考存儲到該函數或在callbacks.ok

VAR取消= callbacks.cancel ||引用function(){};

同樣爲callbacks.cancel

事件[ 'KEYUP '+選擇+',KEYDOWN '+選擇+',事件的內容' +選擇器]

創建對象events(上一行)和用函數填充其屬性'keyup '+selector+', keydown '+selector+', focusout '+selector

cancel.call(此,EVT);

調用存儲在cancel變量中的引用函數,列出參數。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

ok.call(this,value,evt);

相同,但用於函數參考ok變量。

2

的JavaScript參考材料的良好來源是Mozilla Developer Network

挑出你所提到的線,鏈接到相關網頁MDN:

  • 第2和第3使用the || operator,它返回「某事或別的東西。」在這種情況下,它被用來提供默認值,如果任一callbacks.okcallbacks.cancel是不確定的,從而使代碼的其餘部分可以知道ok,並在有效的功能cancel點。給定的字符串時
  • 線6只是串聯大量串在一起成爲使用the + operator一個對象鍵,給定的數字時,其執行加法,而是串聯。
  • 第10,16和18行都使用the call method調用回調,這是在調用未定義爲特定對象成員的函數時爲this設置適當值的方法。

整體效果是創建一個對象events,有一個屬性,它的名稱列出selector多次,並且它的值是可以傳遞的事件,並決定哪兩個回調後執行的功能。

請注意,此函數不包含任何將事件實際附加到任何DOM元素的邏輯;其返回值的結構大概是其他功能的輸入。