我试图找出使用 Node.jsEventEmitter
类时多级继承的最佳方法。
设置是我正在使用可以具有基本控制器的控制器为 Node.js 开发 MVC 框架,但控制器可以发出事件,这些事件也可以在其基本控制器上发出相同的事件。到目前为止,我有:
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 上调用请求事件”,我希望触发两个“请求”事件。我该怎么做呢?也许我需要完全改变我的方法?
更新:感谢大家的帮助。正如 Naor Biton 所建议的,baseController 和 homeController 之间没有继承关系,因为“原型”属性只对构造函数很重要。我总是把我的构造函数和对象实例混在一起。
我最终解决了以下问题:
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');