2016-01-08 96 views
1

所有:Facebook dispatcher.js用什麼語言編寫?

當我學習陣營FLUX,它使我的Facebook Dispatcher.js: https://github.com/facebook/flux/blob/master/src/Dispatcher.js

我不太瞭解它的功能和類語法,可以在任何一個知道用什麼語言寫的呢?是ES6還是TypeScript或其他?我不知道爲什麼它並不需要被transpiled(或該做的,以運行需要transpile像巴貝爾工具?)

我需要解釋有助於某些部分是這樣的:

register(callback: (payload: TPayload) => void): DispatchToken { 
    var id = _prefix + this._lastID++; 
    this._callbacks[id] = callback; 
    return id; 
    } 

或者

class Dispatcher<TPayload> { 
//... 

    constructor() { 
    this._callbacks = {}; 
    this._isDispatching = false; 
    this._isHandled = {}; 
    this._isPending = {}; 
    this._lastID = 1; 
    } 
+0

我正要問同樣的問題,但我很高興你已經做到了:) – Dmitry

回答

3

它是用ES2015編寫的,可以用Babel編譯。 Babel有一整段專門討論learing ES2015你應該檢查出來。上面的第一個代碼使用「箭頭函數」,這是一個保留上下文的函數簡寫(this)。例如。這兩個是相同的:

var fn = function (prop) {/* ... */}.bind(this); 
var fn = (prop) => {/* ... */}; 

該代碼還利用FlowType,這是爲JavaScript靜態類型檢查。 <TPayload>表示相對於TPayloadDispatcher類別爲polymorphic。也就是說,一個類可以從Dispatcher擴展,但使用任何類型的有效載荷,並且靜態類型檢查器將確保在整個類定義中使用相同的類型。除非您在代碼中也使用FlowType,否則您可以放心地忽略它。然而,一個實現可能是這樣的:

class MyDispatcher extends Dispatcher<MyStorageType> { 
    /* ... */ 
} 

現在的靜態類型檢查器將確保在Dispatcher使用類型TPayload的所有地方,它實際上將使用類型MyStorageType


但足夠了解這些細節,因爲您並不需要知道他們使用Facebook的Flux實用程序。通過遵循reference docstutorial(它從頭開始實現基本調度程序),您將更好地瞭解它的工作原理。

希望這會有所幫助!

+0

謝謝,這對我來說很新,我會潛入。 – Kuan

+0

有一件事我不太明白的是,箭頭函數if箭頭函數是(params)=> {body},那麼爲什麼沒有函數體(但是void)在(payload:TPayload)=> void中,我無法將它與你的箭頭函數格式 – Kuan

+0

進行比較這就是說register函數將一個函數作爲參數(在那裏稱爲'callback'),並且該函數需要匹配'undefined'中的簽名'TPayload'。也就是說,'register'在某些時候會用'TPayload'類型的有效載荷調用回調函數,並且它不會返回任何內容。這又是FlowType--我的答案應該更清楚。 –