Red*_*dro 9 javascript events object-literal node.js eventemitter
我试图让我的Node.js对象投射事件.现在,如果我创建"静态"对象并实例化它们,这不是问题,但是当我的对象没有静态爷爷时,如何使用对象文字符号创建对象时如何执行此操作?
我习惯编写ExtJS语法,所以我更喜欢对象文字中的所有内容.
// var EventEmitter = require('events').EventEmitter; // How where when?
myObject = {
myFunction: function() {
console.log('foo');
},
urFunction: function() {
console.log('bar');
}
};
Run Code Online (Sandbox Code Playgroud)
这是一个对象.它没有构造函数,因为不需要更多实例.
现在我如何允许myObject发出事件?
我已经尝试过并尝试调整代码,但是如果不将我的对象重写为带有类似构造函数的表单,我就无法工作:
var EventEmitter = require('events').EventEmitter;
var util = require('util');
function myClass() {
EventEmitter.call(this);
myFunction: function() {
this.emit('foo');
},
urFunction: function() {
this.emit('bar');
}
};
myClass.prototype = Object.create(EventEmitter.prototype);
// or // util.inherits(myClass, EventEmitter);
var myObject = new myClass; // Shouldn't be necessary for my single-instance case
Run Code Online (Sandbox Code Playgroud)
或者将我的函数/原型添加到如此构造的东西:
var EventEmitter = require('events').EventEmitter;
var util = require('util');
var myObject = new EventEmitter();
// or // var myObject = Object.create(new EventEmitter); // Dunno difference
myObject.myFunction = function() {
this.emit('foo');
},
myObject.urFunction = function() {
this.emit('bar');
}
};
util.inherits(myObject, EventEmitter);
Run Code Online (Sandbox Code Playgroud)
如何myObject在保持对象文字符号的同时允许发出事件?这么多令人困惑的方法,但不是那些JSON 类似的标记对象.
为什么不使用组合而不是继承?
var myObject = {
myFunction: function() {
console.log('foo');
},
urFunction: function() {
console.log('bar');
},
emitter: new EventEmitter()
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,您无法实现所需的对象 - 文字语法.这是因为
var obj = {};
Run Code Online (Sandbox Code Playgroud)
相当于
var obj = Object.create(Object.prototype);
Run Code Online (Sandbox Code Playgroud)
在obj原型中,原型固定Object.prototype在创建时,你不能在以后改变它.
因为你只想要一个单一实例,我认为它确实是有意义的创建一个实例EventEmitter,并指定属性吧:
var EventEmitter = require('events').EventEmitter;
var obj = new EventEmitter();
obj.doStuff = function() {
this.emit('stuff');
};
Run Code Online (Sandbox Code Playgroud)
你不需要util.inherits这里,因为你只有一个实例,所以没有设置链.
| 归档时间: |
|
| 查看次数: |
4733 次 |
| 最近记录: |