2016-09-16 43 views
1

我正在使用EventEmitter3这是我的javascript代码中的事件模块。它的工作方式与Node.js中的event模块相同。但是我正面临着正确使用它的问题。我可以使用this.on来收听EventEmitter中的事件吗?在JavaScript中寻找正确使用Eventmitter的类

通常情况下,如果我在我的代码中使用该模块,我会创建一个EventEmitter的对象,然后使用object.emit来触发事件,并使用object.on来侦听事件。而我通常所做的就是将object.on放在另一个班级,这样它就可以很好地工作。

现在我尝试在ES6类中组织我的代码。所以我在我的自定义类中扩展了EventEmitter。假设它被称为类别A,它是EventEmitter的子类别。如果我听自己的事件类定义,像这样:

import EventEmitter from 'eventemitter3'; 

class ClassA extends EventEmitter { 
    constructor() { 
    ... 
    } 

    method() { 
    this.emit('send'); 
    } 

    this.on('send', function(data) { 
    // Do something with data 
    }); 
} 

我就this.on线得到一个意外标记错误。但我不确定如何在班级内听课,或者这是可行的?我必须将听众放在类定义之外吗?

+0

为什么不注入事件发射器而不是继承它?通常构图比继承更灵活,更清洁。 – Yoda

+0

@Yoda你的意思是创建一个专用的事件发射器类,并在此'ClassA'中使用它?假设我有很多'ClassA'的对象,并且我希望对象只听自己的事件,如果我使用专用事件发射器,监听器是否会监听来自其他对象的事件? – newguy

回答

1

你需要把那些应该为构造函数中的每个实例上运行的呼叫:

class ClassA extends EventEmitter { 
    constructor() { 
    super() 
    … 
    this.on('send', data => { 
     // Do something with data 
    }); 
    } 

    method() { 
    this.emit('send'); 
    } 
} 

否则令实例的创建者听的事件,还是听/从你的类的方法中UNLISTEN。

+0

谢谢,看起来不错,简洁。 – newguy

相关问题