node.js中的emitter.emit方法使用说明
node.js中的emitter.emit方法使用说明
发布时间:2016-12-30 来源:查字典编辑
摘要:方法说明:发射event事件,传递若干可选参数到事件监听器的参数表。语法:复制代码代码如下:emitter.emit(event,[arg1...

方法说明:

发射event事件,传递若干可选参数到事件监听器的参数表。

语法:

复制代码 代码如下:

emitter.emit(event, [arg1], [arg2], [...])

接收参数:

event 事件类型

arg1 ~ argN 传递的参数(多个)

例子:

复制代码 代码如下:

var events = require('events');

var emitter = new events.EventEmitter();

emitter.on('someEvent', function(arg1, arg2){

console.log('listener1', arg1, arg2);

})

emitter.on('someEvent', function(arg1, arg2){

console.log('listener2', arg1, arg2);

})

emitter.emit('someEvent', 'byvoid', 1991);

源码:

复制代码 代码如下:

EventEmitter.prototype.emit = function(type) {

var er, handler, len, args, i, listeners;

if (!this._events)

this._events = {};

// If there is no 'error' event listener then throw.

if (type === 'error') {

if (!this._events.error ||

(util.isObject(this._events.error) && !this._events.error.length)) {

er = arguments[1];

if (this.domain) {

if (!er) er = new TypeError('Uncaught, unspecified "error" event.');

er.domainEmitter = this;

er.domain = this.domain;

er.domainThrown = false;

this.domain.emit('error', er);

} else if (er instanceof Error) {

throw er; // Unhandled 'error' event

} else {

throw TypeError('Uncaught, unspecified "error" event.');

}

return false;

}

}

handler = this._events[type];

if (util.isUndefined(handler))

return false;

if (this.domain && this !== process)

this.domain.enter();

if (util.isFunction(handler)) {

switch (arguments.length) {

// fast cases

case 1:

handler.call(this);

break;

case 2:

handler.call(this, arguments[1]);

break;

case 3:

handler.call(this, arguments[1], arguments[2]);

break;

// slower

default:

len = arguments.length;

args = new Array(len - 1);

for (i = 1; i < len; i++)

args[i - 1] = arguments[i];

handler.apply(this, args);

}

} else if (util.isObject(handler)) {

len = arguments.length;

args = new Array(len - 1);

for (i = 1; i < len; i++)

args[i - 1] = arguments[i];

listeners = handler.slice();

len = listeners.length;

for (i = 0; i < len; i++)

listeners[i].apply(this, args);

}

if (this.domain && this !== process)

this.domain.exit();

return true;

};

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类