방법 설명 :
이벤트를 방출하여 이벤트 리스너의 매개 변수 테이블에 여러 선택적 매개 변수를 전달합니다.
문법:
코드 사본은 다음과 같습니다.
Emiter.emit (이벤트, [Arg1], [arg2], [...])
매개 변수 수신 :
이벤트 이벤트 유형
arg1 ~ argn 매개 변수가 통과되었습니다 (다중)
예:
코드 사본은 다음과 같습니다.
var events = 요구 ( '이벤트');
var imitter = new events.eventImitter ();
Emit
Console.log ( 'Listener1', arg1, arg2);
})
Emit
Console.log ( 'Learger2', arg1, arg2);
})
imiter.emit ( 'NodeEvent', 'byVoid', 1991);
소스 코드 :
코드 사본은 다음과 같습니다.
eventimitter.prototype.emit = function (type) {
var er, handler, len, args, i, 청취자;
if (! this._events)
this._events = {};
// '오류'이벤트 리스너가 없으면 던지십시오.
if (type === 'error') {
if (! this._events.error ||
(util.isobject (this._events.error) &&! this._events.error.length)) {
er = 인수 [1];
if (this.domain) {
if (! er) er = new TypeError ( '끊임없는, 지정되지 않은 "오류"이벤트.');
er.domainemitter = this;
er.domain = this.domain;
er.domainthrown = false;
this.domain.emit ( 'error', er);
} else if (er instanceof error) {
ER을 던지십시오. // 처리되지 않은 '오류'이벤트
} 또 다른 {
Throw TypeError ( '끊임없는, 지정되지 않은 "오류"이벤트.');
}
거짓을 반환합니다.
}
}
handler = this._events [type];
if (util.isundefined (handler))
거짓을 반환합니다.
if (this.domain && this! == 프로세스)
this.domain.enter ();
if (util.isfunction (handler)) {
스위치 (arguments.length) {
// 빠른 케이스
case 1:
handler.call (this);
부서지다;
case 2:
handler.call (이것은 인수 [1]);
부서지다;
사례 3 :
handler.call (이것은 인수 [1], 인수 [2]);
부서지다;
// 느린
기본:
len = arguments.length;
args = 새로운 배열 (Len -1);
for (i = 1; i <len; i ++)
args [i -1] = 인수 [i];
handler.Apply (this, args);
}
} else if (util.isobject (handler)) {
len = arguments.length;
args = 새로운 배열 (Len -1);
for (i = 1; i <len; i ++)
args [i -1] = 인수 [i];
리스너 = handler.slice ();
len = Listeners.length;
for (i = 0; i <len; i ++)
청취자 [i]. Apply (this, args);
}
if (this.domain && this! == 프로세스)
this.domain.exit ();
진실을 반환하십시오.
};