【发布时间】: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 中压倒性的约定是 构造函数 的名称(如您的
mob、items和world)以大写字母开头;所以,Mob、Items和World。最后,请注意对象的所有属性本质上都是公开的,因此不需要getHealth、getValue或setWeather;您可以直接使用health、value和weather。 (Private fields 将很快添加到class语法中。它们不是属性,尽管它们很相似。) -
对,当然好点。感谢指正!
标签: javascript node.js class oop