【问题标题】:Why to assign prototype to itself为什么要将原型分配给自己
【发布时间】:2015-05-07 06:36:17
【问题描述】:

我在 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

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

【问题讨论】:

  • 如果你这样做,它不会修改在分配完成之前使用“new Dispatcher()”创建的对象的原型。我猜它遵循“不变性”-idea,还保留了原始原型函数,这里小测试jsfiddle.net/uxfr8bea

标签: javascript flux


【解决方案1】:

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

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

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

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

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

上面只是扩展原型而不需要重新分配。

【讨论】:

  • 澄清一下:在第二个 assign 示例之前没有 ... =。与第一个相比,这可能不清楚。
猜你喜欢
  • 2016-06-16
  • 2016-02-10
  • 1970-01-01
  • 2012-06-15
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2022-10-05
相关资源
最近更新 更多