繁体   English   中英

如何将自定义事件添加到节点中的类?

[英]How do I add custom events to classes in node?

所以我只是拿起节点,我想知道如何将自定义事件添加到类中。 下面是我尝试的代码。 本质上只是创建一个简单的农场类,每当动物数量发生变化时,我都会显示新数字。 我要创建的事件是 totalChanged。

let events = require('events');

class Farm{
    constructor(totalAnimals){
        this._totalAnimals = totalAnimals;
        events.EventEmitter.call(this);
    }

    get totalAnimals(){
        return this._totalAnimals
    }

    set totalAnimals(newTotal){
        this._totalAnimals = newTotal;
    }

    sellAnimals(amount){
        this._totalAnimals -= amount;
        this.emit("totalChanged");
    }

    buyAnimals(amount){
        this._totalAnimals += amount;
        this.emit("totalChanged");
    }

    toString(){
        return "Number of animals in farm: " + this._totalAnimals;
    }
}

let testFarm = new Farm(100);
testFarm.on("totalChanged",testFarm.toString());
testFarm.buyAnimals(20);

你有几个选择:

如果你想使用instance.on你必须像这样从EventEmitter继承

let EventEmitter = require('events').EventEmitter

class Farm extends EventEmitter {
  constructor() {
    super()
  }

  buyAnimals() {
    this.emit('totalChanged', { value: 'foo' })
  }
}

let testFarm = new Farm()
testFarm.on('totalChanged', value => {
  console.log(value)
})

testFarm.buyAnimals()

如果你更喜欢使用组合而不是继承,你可以简单地将EventEmitter实例化为一个属性并使用instance.eventEmitter.on ,如下所示:

let EventEmitter = require('events').EventEmitter

class Farm {
  constructor() {
    this.eventEmitter = new EventEmitter()
  }

  buyAnimals() {
    this.eventEmitter.emit('totalChanged', { value: 'foo' })
  }
}

let testFarm = new Farm()
testFarm.eventEmitter.on('totalChanged', value => {
  console.log(value)
})

testFarm.buyAnimals()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM