Я пытаюсь найти лучший подход к нескольким уровням наследования при использовании класса Node.js EventEmitter
.Node.js EventEmitter и несколько уровней наследования
Установка Я разрабатываю структуру MVC для Node.js, используя контроллеры, которые могут иметь базовые контроллеры, но контроллеры могут генерировать события, которые также генерируют одно и то же событие на его базовом контроллере. До сих пор у меня есть:
var events = require('events');
var util = require('util');
var Controller = function() { };
util.inherits(Controller, events.EventEmitter);
var baseController = new Controller();
baseController.on('request', function() {
console.log('Calling request event on baseController');
});
var homeController = new Controller();
homeController.prototype = baseController;
homeController.on('request', function() {
console.log('Calling request event on homeController');
});
homeController.emit('request');
... но только «Вызов запроса события на HomeController» выводится, я хочу как «запрос» события на огонь. Как мне это сделать? Может, мне нужно полностью изменить свой подход?
Update: спасибо за помощь всем. Как предположил Наор Битон, не было наследования между baseController и homeController, потому что свойство «prototype» имеет значение только для функций конструктора. Я всегда получаю, что мои функции конструктора и экземпляры объектов перепутаны.
В конце концов я остановился на следующем:.
var events = require('events');
var util = require('util');
var Controller = function() { };
util.inherits(Controller, events.EventEmitter);
Controller.createBaseController = function() {
var BaseController = function() { };
util.inherits(BaseController, Controller);
return new BaseController();
};
Controller.inheritController = function(baseController) {
var NewController = function() { };
NewController.prototype = baseController;
return new NewController();
};
var baseController = Controller.createBaseController();
baseController.on('request', function() {
console.log('Calling request event on baseController');
});
var homeController = Controller.inheritController(baseController);
homeController.on('request', function() {
console.log('Calling request event on homeController');
});
homeController.emit('request');
Это не похоже на (прототипное) наследование, но больше похоже на составной узор. – Bergi