将旧学校的javascript实体转换为ES6课程

时间:2016-09-04 06:08:47

标签: javascript node.js ecmascript-6

假设我有这样一个类:

let initPack = { player: [] };
let Player = function(param) {
  let self = {
    id: param.id,
    x: param.x,
    y: param.y
  }

  self.update = function() {
    self.x += 1;
    self.y += 1;
  }

  self.getInitPack = function() {
    return {
      id: self.id,
       x: self.x,
       y: self.y
    }
  }

  Player.list[self.id] = self;
  initPack.player.push(self.getInitPack());
  return self;
}

Player.list = {};

如果我想将其重写为ES6类并将其放入node.js中的单独文件中,例如:

module.exports = class Player {
  constructor(param) {
     this.id = param.id;
     this.x = param.x;
     this.y = param.y;
  }

  update() {
     this.x += 1;
     this.y += 1;
  }

  getInitPack() {
    return {
      id: self.id,
       x: this.x,
       y: this.y
    }
  }
}

如何重写课程的其余部分以使其像上一部分一样工作?在原始文件中有一些静态成员和外部变量的使用。但我不确定如何在ES6中正确地做到这一点。

1 个答案:

答案 0 :(得分:1)

您可以将这些内容放在构造函数内或class旁边,就像之前一样。

class Player {
  constructor(param) {
    this.id = param.id;
    this.x = param.x;
    this.y = param.y;

    Player.list[this.id] = this;
    initPack.player.push(this.getInitPack());
  }
  update() {
    …
  }
  getInitPack() {
    …
  }
}
Player.list = {};
const initPack = { player: [] };

module.exports = Player;

但是你应该注意到这样的全局单例存储是一个反模式,即使你真的需要它们,你也应该更好地将它们与构造分离。