คำอธิบายวิธี:
เหตุการณ์ปล่อยออกมาผ่านพารามิเตอร์เสริมหลายตัวไปยังตารางพารามิเตอร์ของผู้ฟังเหตุการณ์
ไวยากรณ์:
การคัดลอกรหัสมีดังนี้:
emitter.emit (เหตุการณ์, [arg1], [arg2], [... ])
รับพารามิเตอร์:
ประเภทเหตุการณ์เหตุการณ์
พารามิเตอร์ arg1 ~ argn ผ่าน (หลาย)
ตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
เหตุการณ์ var = ต้องการ ('เหตุการณ์');
var emitter = เหตุการณ์ใหม่ eventemitter ();
emitter.on ('someEvent', ฟังก์ชั่น (arg1, arg2) {
console.log ('Listener1', arg1, arg2);
-
emitter.on ('someEvent', ฟังก์ชั่น (arg1, arg2) {
console.log ('Listener2', arg1, arg2);
-
emitter.emit ('someevent', 'byvoid', 1991);
ซอร์สโค้ด:
การคัดลอกรหัสมีดังนี้:
Eventemitter.prototype.emit = function (ประเภท) {
var er, handler, len, args, i, ผู้ฟัง;
if (! this._events)
this._events = {};
// ถ้าไม่มีผู้ฟังเหตุการณ์ 'ข้อผิดพลาด' ให้โยน
if (type === 'ข้อผิดพลาด') {
if (! this._events.error ||
(util.isobject (this._events.error) &&! this._events.error.length)) {
ER = อาร์กิวเมนต์ [1];
if (this.domain) {
if (! er) er = new typeerror ('uncaught, unctified "ข้อผิดพลาด" เหตุการณ์');
er.domainemitter = this;
er.domain = this.domain;
er.domainThrown = false;
this.domain.emit ('ข้อผิดพลาด', ER);
} อื่นถ้า (ER Instanceof ข้อผิดพลาด) {
โยนเอ่อ; // เหตุการณ์ 'ข้อผิดพลาด' ที่ไม่สามารถจัดการได้
} อื่น {
โยน typeError ('uncaught, unpecified "ข้อผิดพลาด" เหตุการณ์');
-
กลับเท็จ;
-
-
handler = this._events [type];
if (util.isundefined (Handler))
กลับเท็จ;
if (this.domain && this! == กระบวนการ)
this.domain.enter ();
if (util.isfunction (Handler)) {
สวิตช์ (อาร์กิวเมนต์ความยาว) {
// กรณีที่รวดเร็ว
กรณีที่ 1:
handler.call (นี่);
หยุดพัก;
กรณีที่ 2:
handler.call (นี่, อาร์กิวเมนต์ [1]);
หยุดพัก;
กรณีที่ 3:
handler.call (นี่, ข้อโต้แย้ง [1], อาร์กิวเมนต์ [2]);
หยุดพัก;
// ช้าลง
ค่าเริ่มต้น:
LEN = อาร์กิวเมนต์ความยาว;
args = อาร์เรย์ใหม่ (Len - 1);
สำหรับ (i = 1; i <len; i ++)
args [i - 1] = อาร์กิวเมนต์ [i];
handler.apply (นี่, args);
-
} อื่นถ้า (util.isobject (handler)) {
LEN = อาร์กิวเมนต์ความยาว;
args = อาร์เรย์ใหม่ (Len - 1);
สำหรับ (i = 1; i <len; i ++)
args [i - 1] = อาร์กิวเมนต์ [i];
ฟัง = handler.slice ();
len = ผู้ฟังความยาว;
สำหรับ (i = 0; i <len; i ++)
ผู้ฟัง [i]. Apply (นี่, args);
-
if (this.domain && this! == กระบวนการ)
this.domain.exit ();
กลับมาจริง;
-