動漫人物
2022-10-27 15:38:38
我正在查看節點文檔并嘗試了解此功能server.on('connection', (stream) => { console.log('someone connected!');});emitter.on(eventName, listener)我感到困惑的部分是這個;具體部分加粗。"將偵聽器函數添加到名為 eventName 的事件的偵聽器數組的末尾。"for 是否意味著所有發射器(在本例中是服務器)都有一個偵聽器數組,并且該數組中的一些函數是“用于”(指定給)某些事件的?;蛘撸@是否意味著所有事件都有一個偵聽器數組,并且它只會將此函數(流)添加到“連接”事件中。如果是后者,那么 eventlistenerarray[lastindex aka (stream)] 如何知道它僅在事件發生在 emmiter... 服務器上時才運行在這種情況下
2 回答

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
_每個你附加事件的對象來存儲它們自己的事件(獨立于其他對象)
_每個事件名稱都有自己的(有序)函數數組(獨立于同一對象中的其他事件)
細節:
您在有關事件的節點文檔的這一部分中有一個很好的例子來說明它的結構和存儲方式
const myEmitter = new MyEmitter();
myEmitter.on('myEvent', function(a, b) {
console.log(a, b, this, this === myEmitter);
// Prints:
// a b MyEmitter {
// domain: null,
// _events: { myEvent: [Function] },
// _eventsCount: 1,
// _maxListeners: undefined } true
});
myEmitter.emit('myEvent', 'a', 'b');
您可以看到,當this(事件附加到的對象)被記錄時,事件處理程序存儲在對象本身內部(在屬性中_events)。它是對象的形式,其中所有事件名稱都是鍵,值是附加到事件的所有函數的數組。它在這里是一個數組這一事實很重要,因為函數將按照它們被添加的順序被同步調用。
添加回答
舉報
0/150
提交
取消