【发布时间】:2016-04-06 07:21:28
【问题描述】:
我试图通过查看他们的flux chat example 的源代码来了解 Facebook Flux 的工作原理。
在那里,我看到了this code:
var MessageStore = assign({}, EventEmitter.prototype, {
emitChange: function() {
this.emit(CHANGE_EVENT);
},
/**
* @param {function} callback
*/
addChangeListener: function(callback) {
this.on(CHANGE_EVENT, callback);
},
...
}
...
module.exports = MessageStore;
...assign 只是 ES6 规范中的 polyfill Object.assign。
嗯。这个代码,使用类和扩展,会工作吗?会是同一个意思吗?这种方法有什么区别和优点/缺点?
class MessageStore extends EventEmitter {
emitChange() {
this.emit(CHANGE_EVENT);
}
addChangeListener(callback) {
this.on(CHANGE_EVENT, callback);
}
...
}
module.exports = new MessageStore();
我问,因为来自其他语言,我直观地理解类/扩展,而基于原型的继承对我来说总是有点不清楚。
【问题讨论】:
-
Object.assign只复制属性,没有继承。 -
但是我写的代码应该是等价的,不是吗?也许除了一个只创建和使用一次的类。
-
相似,但不相同,问题 - stackoverflow.com/questions/29548562/…
-
那要看
EventEmitter.prototype是否会被修改。如果你想要继承,也可以考虑使用Object.assign(Object.create(EventEmitter.prototype), {...}) -
嗯。如果修改了
EventEmitter.prototype,这两个代码都会做同样的事情,不是吗?
标签: javascript ecmascript-6 flux