Я пытаюсь понять, как работает Facebook Flux, глядя на исходный код их пример чата Flux.
Там я увидел это код:
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 - это просто полифилл Object.assign из спецификации ES6.
Хм. Будет ли работать этот код с использованием классов и расширений? Будет ли это означать то же самое? Каковы различия и преимущества/недостатки этого подхода?
class MessageStore extends EventEmitter {
emitChange() {
this.emit(CHANGE_EVENT);
}
addChangeListener(callback) {
this.on(CHANGE_EVENT, callback);
}
...
}
module.exports = new MessageStore();
Я спрашиваю, потому что, придя из других языков, я интуитивно понимаю class/extends, в то время как наследование на основе прототипов всегда немного непонятно для меня.
this
будет ссылаться на объект, даже если это обычная функция, как в моем вопросе, нет? 02.01.2016