nir*_*ack 8 javascript mocha.js node.js eventemitter protractor
我们可以有一个发射器的多个侦听器,每个都在不同数量的参数上工作吗?
例如,让事件发射器像这样:
evetE.emit('pre', global, file, self);
corresponding event listeners:
//Listener 1
m.eventE.on('pre', function() {
//TODO
})
//Listener 2
eventE.on('pre', function(context, file, m){
console.log(context.ans);
});
//Listener 3
eventE.on('pre', function(context){
console.log(context.ans);
});
//Listener 4
this.eventE.on('pre',function (context) {})
Run Code Online (Sandbox Code Playgroud)
如果以上是真的,那么哪个参数转到哪个监听器?
myn*_*iil 19
事件监听器只是常规的JS函数.因此,您可以根据需要传递任意数量的参数,但函数只能访问您在函数定义中声明的参数,即
var EE = require('events').EventEmitter;
var ee = new EE();
ee.on('test', function (first, second, third) {
console.log(first, second, third); //Will output full phrase
});
ee.on('test', function (first) {
console.log(first); //Will output just first word
});
ee.on('test', function () {
console.log.apply(console, arguments); //Will output full phrase again
});
ee.emit('test', 'Hello', 'my', 'world!');
Run Code Online (Sandbox Code Playgroud)
实际上你可以看到所有提供的参数总是传递给每个函数.但是如果你没有在函数声明中定义参数名,你将无法直接访问这些参数.但是你可以在每个函数中使用魔术"arguments"对象来访问所有提供的参数.当然,参数按照它们传递给EE的顺序提供给函数.
小智 5
EventEmitter似乎使用apply方法调用所有侦听器.因此,每个侦听器都可以期望以传递给emit函数的相同顺序接收参数.以下代码演示了无参数侦听器仍然接收函数的所有参数.
var EventEmitter = require('events').EventEmitter;
var ee = new EventEmitter();
ee.on('myEvent', function() {
console.log('no arguments');
console.log(arguments); // Outputs: { '0': 'arg 1', '1': 'arg 2' }
});
ee.on('myEvent', function(arg1, arg2) {
console.log('with arguments');
console.log(arg1);
console.log(arg2);
});
ee.emit('myEvent', 'arg 1', 'arg 2');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13741 次 |
| 最近记录: |