【问题标题】:Proper organize classes in javascript在 javascript 中正确组织类
【发布时间】:2020-01-29 09:45:34
【问题描述】:

我正在为 node.js 中的游戏编写服务器。

我对正确的结构有疑问。例如我有这个代码:

class mob {
    constructor(name) {
      this.name = name;
      this.health = 100;
    }
    getHealth() {
      return this.health;
    }
}

class items{
    constructor(name, id) {
      this.name = name;
      this.id= id;
      this.value= value;
    }
    getValue() {
      return this.value;
    }
}

 class world {
    constructor(name) {
      this.name = name;
      this.weather = 'rain';
      this.monsters = {};
    }

   addMonster(name) {
     const monster = new mob(name);
     this.monsters['1'] = monster;
   }

   setWeather(weather) {
     this.weather = weather;
   }
   play() {
     this.addMonster('dragon');

   }
 }

game = new world;
game.play();

我想在世界级中操纵天气,而不是在怪物级中复制它,例如使用如下代码: monster.setWeather('snow');

除此之外,我想在世界类中添加新的类,如项目、地图对象等,并使用世界类中的函数来操作它们。例如: item.setWeather('rainbow'); 并在其他类上操作类,如 monster.getItemValue('item') 在 javascript 中执行此操作的正确方法是什么?

【问题讨论】:

  • 欢迎来到 Stack Overflow!请使用tour(您将获得徽章!),环顾四周,并阅读help center,尤其是How do I ask a good question?,我还推荐Jon Skeet 的Writing the Perfect Question。恐怕这对于 SO 的问答形式来说过于宽泛和开放。我建议通过一些基本的 JavaScript 教程和/或一本好的初学者书籍来学习基础知识。
  • 附带说明:this.monsters['1'] = monster; 不是 添加monsters 数组的正确方法;它总是将怪物放在索引 1 处(使索引 0 和索引 2 向前空置)。要向数组添加条目,通常使用 push 方法:this.monsters.push(new mob(name));,尽管您也会看到类似 this.monsters[this.monsters.length] = new mob(name); 的内容(我不建议这样做)。
  • 此外,JavaScript 中压倒性的约定是 构造函数 的名称(如您的 mobitemsworld)以大写字母开头;所以,MobItemsWorld。最后,请注意对象的所有属性本质上都是公开的,因此不需要getHealthgetValuesetWeather;您可以直接使用healthvalueweather。 (Private fields 将很快添加到 class 语法中。它们不是属性,尽管它们很相似。)
  • 对,当然好点。感谢指正!

标签: javascript node.js class oop


【解决方案1】:

我不知道我是否理解正确。

由于你已经有一个全局变量“game”,你可以直接使用“game.setWeather()”。

【讨论】:

  • 对,但我想在世界(游戏​​)类中以这种方式进行操作。
  • 我想要这样的东西:` class mob { constructor(name) { this.name = name; this.health = 100; } getHealth() { 返回 this.health; } setWeather(weather) { game.setWeather(weather) } } ` 但是我得到一个错误,游戏不是声明的对象。
  • 好的,你的解决方案没问题,问题可能是因为我使用了两个单独的文件,然后我不能以这种方式使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 2014-01-19
  • 2011-01-26
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
相关资源
最近更新 更多