2016-01-08 59 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--我的答案应该更清楚。 –