为什么要给自己赋值原型
Why to assign prototype to itself
我在 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
将扩展原型分配给同一对象的原型的原因是什么?
我猜他们只是想扩展原型。当Object.assign
(npm object-assign
是一个pollyfill)是这样使用的:
assign({}, Dispatcher.prototype, {/* ... */});
它 returns 一个新对象,扩展 Dispatcher.prototype
的结果(原型的属性被复制到新对象),但是原始 Dispatcher.prototype
不受影响。因此,为了实际扩展它,他们必须将原型与新的扩展对象一起重新分配。
然而,避免混淆赋值更有意义:
assign(Dispatcher.prototype, {/* ... */});
以上只是扩展原型而不需要重新分配。
我在 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
将扩展原型分配给同一对象的原型的原因是什么?
我猜他们只是想扩展原型。当Object.assign
(npm object-assign
是一个pollyfill)是这样使用的:
assign({}, Dispatcher.prototype, {/* ... */});
它 returns 一个新对象,扩展 Dispatcher.prototype
的结果(原型的属性被复制到新对象),但是原始 Dispatcher.prototype
不受影响。因此,为了实际扩展它,他们必须将原型与新的扩展对象一起重新分配。
然而,避免混淆赋值更有意义:
assign(Dispatcher.prototype, {/* ... */});
以上只是扩展原型而不需要重新分配。