2015-05-07 34 views
2

我發現Object.assign的一個有趣的用例通量的文檔中,例如調度員在其體系結構:爲什麼分配原型本身

var assign = require('object-assign'); 

var _callbacks = []; 

var Dispatcher = function() {}; 
Dispatcher.prototype = assign({}, Dispatcher.prototype, { 
    register: function(callback) { 
     _callbacks.push(callback); 
     return _callbacks.length - 1; // index 
    } 
}); 

來源:http://facebook.github.io/flux/docs/todo-list.html#creating-a-dispatcher

什麼是分配的原因擴展原型到同一個對象的原型?

+2

如果你這樣做,它不會修改在分配完成之前用「new Dispatcher()」創建的對象的原型。我想它遵循「不變性」-idea,也保留原始原型函數,這裏的小測試http://jsfiddle.net/uxfr8bea/ –

回答

2

我的猜測是他們只是想擴展原型。當Object.assign(NPM object-assign是pollyfill)被用於這樣的:

assign({}, Dispatcher.prototype, {/* ... */}); 

它返回一個新的對象,的Dispatcher.prototype延伸的結果(從原型屬性複製到新對象),然而原Dispatcher.prototype不受影響。所以爲了實際擴展它,他們不得不重新分配新的擴展對象的原型。

但是它會更有意義,以避免混淆分配:

assign(Dispatcher.prototype, {/* ... */}); 

以上只會延長原型,而無需重新分配。

+0

澄清:在第二個'assign'例子之前沒有'... =' 。與第一個比較可能不太清楚。 – deceze