javascript - node.js 克隆 eventemitter 对象

标签 javascript node.js event-handling

我有一个游戏

game = {
  turn: 5,
  players : []
}

game.events = new events.emitter()
game.events.on('attack', handleAttack)

我需要将游戏状态精确地克隆(深入)到另一个对象,以便我可以为 AI 运行游戏模拟。我将如何克隆事件对象?

最佳答案

正如评论中所指出的,不要在函数中包含状态,这样就没有必要复制函数。

这是一个相当简单的例子。

const EventEmitter = require('events');

class Game {
  constructor(name, turn) {
    this.turn  = turn;
    this.name = name;
    this.events = new EventEmitter();
    this.events.on('attack', () => {
      console.log(`${this.name} is attacking`);
    })
  }

  clone(){
    const copy = new Game(this.name, this.turn);
    //clone the other properties
    return copy;
  }

}


const g1 = new Game("One", 5);
const g2 = new Game("Two", 4);

g1.events.emit('attack');
g2.events.emit('attack');

const g3 = g1.clone();
g3.events.emit('attack');

您必须特别注意克隆属性本身,但请注意 g3 只是 g1 的副本。希望这会有所帮助。

关于javascript - node.js 克隆 eventemitter 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50294481/

相关文章:

java - frame.revalidate() 对于在事件发生后获取输出很重要吗?

event-handling - WMI 和 Win32_DeviceChangeEvent - 返回了错误的事件类型?

javascript - jQuery 将单个类与预定义列表进行匹配,其中元素具有多个类

javascript - 在谷歌脚本中附加带有复选框的行

javascript - DSP 是否为 :input supports onclick?

javascript - 给数据赋值: in $. ajax函数

node.js - Alexa 的 AWS Lambda 函数中的 HTTP 请求失败

javascript - 从条形图钻取饼图 - xAxis 仍然存在

javascript - 带串口的数据流和 Promises Node.js

node.js - 在 Node Js(请求)中如何在多部分 http 请求中发送文件