node.js中的emitter.emit方法使用说明
本文向大家介绍node.js中的emitter.emit方法使用说明,包括了node.js中的emitter.emit方法使用说明的使用技巧和注意事项,需要的朋友参考一下
方法说明:
发射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; };