为什么要将原型分配给自己

时间:2015-05-07 06:36:18

标签: javascript flux

我在Flux的文档中找到了一个有趣的Object.assign用例,在其架构中有Dispatcher的例子:

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

将扩展原型分配给同一对象的原型是什么原因?

1 个答案:

答案 0 :(得分:2)

我的猜测是他们只是想扩展原型。当Object.assign(npm object-assign是一个pollyfill)时,使用如下:

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

它返回一个新对象,Dispatcher.prototype的扩展结果(原型中的属性被复制到新对象),但原始Dispatcher.prototype 不受影响。因此,为了实际扩展它,他们必须将原型与新的扩展对象一起重新分配。

但是,避免混淆分配会更有意义:

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

以上只是扩展原型而无需重新分配。