使用事件的更好方法是什么?
A)
var doorBell = new events.EventEmitter()
var light = new events.EventEmitter()
doorBell.emit('open')
light.emit('on')
doorBell.on('open', function(){
console.log('The door is open!');
});
light.on('on', function(){
console.log('The lights are on');
});
B)
var house = new events.EventEmitter()
house.emit('doorOpen')
house.emit('lightOn')
house.on('doorOpen', function(){
console.log('The door is open!');
});
house.on('lightOn', function(){
console.log('The lights are on');
});
我想知道两者之间是否存在任何差异,表现明智或任何差异......
答案 0 :(得分:1)
我有点不喜欢给出这个答案,但我说取决于。
如您所知,这两种变体都有效,所以这只是一个偏好问题。对象隐藏了复杂性,应该使用事件来记住这个想法。在你的例子中,我认为使用一个 house 对象是完全没问题的,该对象会发出事件来打开灯光并敲响门铃。
正如您可能预见的那样,事件的添加将会变得混乱。因此,您必须自己决定某个事件是否属于特定对象范围的边界。
答案 1 :(得分:-1)
都不是。
虽然您可以使用这样的事件发射器,但这并不是您应该如何使用它们。
你的班级原型应该扩展事件发射器的原型,然后从你的类创建的对象可以发出事件,你可以听取它们。
使用像这样的事件发射器非常直观:
var em = require('events').EventEmitter;
var House = function() { };
//House objects now emits events
House.prototype = em.prototype;
House.prototype.openDoor = function() {
this.emit('door opened');
};
House.prototype.turnOnLight = function() {
this.emit('light turned on');
};
var myHouse = new House();
myHouse.on('door opened',function() {
console.log("somebody's in my house!");
});