2015-09-17 34 views
0

我讀通過this Flux教程和對象的創建有這樣的創建對象背後的理念:什麼是使用Object.assign

var AppDispatcher = assign({}, Dispatcher.prototype, { 

    /** 
    * A bridge function between the views and the dispatcher, marking the action 
    * as a view action. Another variant here could be handleServerAction. 
    * @param {object} action The data coming from the view. 
    */ 
    handleViewAction: function(action) { 
    this.dispatch({ 
     source: 'VIEW_ACTION', 
     action: action 
    }); 
    } 

}); 

他們使用Object.assign通過填充工具。由於Object.assign將所有屬性複製到對象,而不是Object.create(prototype),我想知道他們的動機是直接將屬性複製到AppDispatcher。有任何想法嗎?

回答

1

它只是根據其原型創建Dispatcher的副本。

如果你是做AppDispatcher = Dispatcher;,然後變異AppDispatcher,你也將變異Dispatcher。在這種情況下,assign只是創建一個安全副本,然後讓您指定屬性副本

+0

你能否詳細說明那部分'...基於它的原型嗎?如何在不使用'assign'的情況下完成同樣的工作? –

+0

@Maximus,你可以做'var AppDispatcher = Object.create(Dispatcher.prototype)',然後設置'AppDispatcher.handleViewAction =/*任何* /'。他們這樣做的方式只是爲了方便。使其更簡潔。沒有什麼特別的或隱藏的,這只是另一種方式。 –

+0

'Object.create','Dispatcher.prototype'上可用的屬性將可以通過原型鏈訪問,但我認爲'assign'複製這些屬性並使它們具有'AppDispatcher'的屬性,不是嗎? –

相關問題