Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么要将原型分配给它自己_Javascript_Flux - Fatal编程技术网

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

Javascript 为什么要将原型分配给它自己,javascript,flux,Javascript,Flux,我在Flux的文档中发现了Object.assign的一个有趣的用例,它是Dispatcher架构中的一个示例: var assign = require('object-assign'); var _callbacks = []; var Dispatcher = function() {}; Dispatcher.prototype = assign({}, Dispatcher.prototype, { register: function(callback) {

我在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
    }
});
资料来源:


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

我猜他们只是想扩展原型。当(npm
object assign
是pollyfill)这样使用时:

assign({}, Dispatcher.prototype, {/* ... */});
它返回一个新对象,即扩展
Dispatcher.prototype
(prototype中的属性复制到新对象)的结果,但是原始
Dispatcher.prototype
不受影响。所以为了实际扩展它,他们必须重新分配原型和新的扩展对象

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

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

上述方法只需扩展原型,无需重新分配。

如果这样做,则不会修改在分配完成之前使用“new Dispatcher()”创建的对象的原型。我猜它遵循了“不变性”的思想,同时保留了原始的原型函数,这里的小测试就是为了澄清:没有
=在第二个
之前分配
示例。与第一个相比,这一点可能并不清楚。