Javascript 构造函数作为事件发射器
我想为node.js中的一些工作编写一个构造函数。除此之外,我想记录它使用事件发射器创建的实例数。目前,我通过给构造函数对象一个方法来实现这一点,该方法是一个事件发射器。例如:Javascript 构造函数作为事件发射器,javascript,oop,node.js,events,Javascript,Oop,Node.js,Events,我想为node.js中的一些工作编写一个构造函数。除此之外,我想记录它使用事件发射器创建的实例数。目前,我通过给构造函数对象一个方法来实现这一点,该方法是一个事件发射器。例如: var EventEmitter = require('events').EventEmitter; function MyObject() { ... MyObject.events.emit('createdMyObject') } MyObject.events = new EventEmitt
var EventEmitter = require('events').EventEmitter;
function MyObject() {
...
MyObject.events.emit('createdMyObject')
}
MyObject.events = new EventEmitter();
/* somewhere else... */
MyObject.events.on('createdMyObject', function () {
// Do something when a new instance is created.
});
var EventEmitter = require('events').EventEmitter;
MyObj = function (a) {
this.a = a;
MyObj.emit('new')
}
MyObj.__proto__ = EventEmitter.prototype;
MyObj.on('new', function () {
console.log('A new myObj was constructed.');
});
var myObj = new MyObj(1);
我真正喜欢的是构造函数更直接地发出事件,这样我就可以用如下方式监听它们:
MyObject.on('createdMyObject', function () {
// Do something when a new instance is created.
});
有办法做到这一点吗
请注意,我不需要实例是事件发射器(当你用谷歌搜索它时,有很多这样的例子)。我想要一些与其他OO语言中的类方法等效的东西。你能不能把
事件别名一下。on
到on
?:
// Note: can't use simple function assignment because we need
// the "this" inside on to point to events instead of MyObject
MyObject.on = function (eventType,callback) {
MyObject.events.on(eventType,callback);
}
它并没有去掉MyObjects.events,只是提供了一种添加事件处理程序的替代方法
补充答复 如果您确实希望对象成为事件发射器,那么您可能希望从EventEmitter对象继承?如果是这样,只需执行常规继承:
function MyObject() {
/*
* MyObject specific stuff here
*/
this.emit('createdMyObject');
}
// Now we inherit from an EventEmitter object:
MyObject.prototype = Object.create(EventEmitter.prototype);
您不能将
事件别名为。on
到on
// Note: can't use simple function assignment because we need
// the "this" inside on to point to events instead of MyObject
MyObject.on = function (eventType,callback) {
MyObject.events.on(eventType,callback);
}
它并没有去掉MyObjects.events,只是提供了一种添加事件处理程序的替代方法
补充答复 如果您确实希望对象成为事件发射器,那么您可能希望从EventEmitter对象继承?如果是这样,只需执行常规继承:
function MyObject() {
/*
* MyObject specific stuff here
*/
this.emit('createdMyObject');
}
// Now we inherit from an EventEmitter object:
MyObject.prototype = Object.create(EventEmitter.prototype);
使用构造函数的非标准(但显然非常常用)
\uuuu proto\uuu
属性可以解决这个问题。例如:
var EventEmitter = require('events').EventEmitter;
function MyObject() {
...
MyObject.events.emit('createdMyObject')
}
MyObject.events = new EventEmitter();
/* somewhere else... */
MyObject.events.on('createdMyObject', function () {
// Do something when a new instance is created.
});
var EventEmitter = require('events').EventEmitter;
MyObj = function (a) {
this.a = a;
MyObj.emit('new')
}
MyObj.__proto__ = EventEmitter.prototype;
MyObj.on('new', function () {
console.log('A new myObj was constructed.');
});
var myObj = new MyObj(1);
将创建预期的
{a:1}
对象,创建事件将触发console.log!如果任何人都可以使用类似于Object.create
的方法来提供此行为的替代路径,那么出于法规遵从性的原因,这当然是最好的选择。这可以通过使用构造函数的非标准(但显然非常常用)的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu属性来解决。例如:
var EventEmitter = require('events').EventEmitter;
function MyObject() {
...
MyObject.events.emit('createdMyObject')
}
MyObject.events = new EventEmitter();
/* somewhere else... */
MyObject.events.on('createdMyObject', function () {
// Do something when a new instance is created.
});
var EventEmitter = require('events').EventEmitter;
MyObj = function (a) {
this.a = a;
MyObj.emit('new')
}
MyObj.__proto__ = EventEmitter.prototype;
MyObj.on('new', function () {
console.log('A new myObj was constructed.');
});
var myObj = new MyObj(1);
将创建预期的{a:1}
对象,创建事件将触发console.log!如果任何人都可以使用类似于Object.create
的方法提供此行为的替代路径,那么出于法规遵从性的原因,这当然是最好的选择。这是一个示例,如何构造作为事件管理器的对象
```
```这是一个示例,如何构造作为事件emmiter的对象
```
```它可以工作,但我更希望构造函数是一个真正的事件发射器。第二个答案似乎使实例成为事件发射器,这不是问题所在。我真的需要构造函数作为发射器,所以我只有一件事可以设置侦听器。它可以工作,但我更希望构造函数是真正的事件发射器。第二个答案似乎使实例成为事件发射器,这不是问题所在。我真的需要构造函数作为发射器,所以我只有一个东西可以设置侦听器。对不起,这是一个对象。我在构造事件发射器对象时没有问题。我想构造一个事件发射器函数(如标题中所述)。对不起,这是一个对象。我在构造事件发射器对象时没有问题。我想构造一个事件发射器函数(如标题中所述)。