javascript - 类参数的继承

标签 javascript class

我想让 Bob 成为一个具有所有 NPC 类参数和所有 Civil 类参数的 NPC但是 我不知道如何声明它,因此两个类都会读取 params 关联数组来定义 Bob 属性。

我的代码:

class Civil {
  constructor(params) {
    params["gold"] ? this.gold = params["gold"] : this.gold = 0;
  }
}

class NPC extends Civil {
  constructor(params) {
    super();
    params["name"] ? this.name = params["name"] : this.name = "No name defined";
    params["race"] ? this.race = params["race"] : this.race = "No race defined";
  }
}

var bob = new NPC({
  "name": "Bob",
  "race": "Human",
  "gold": 10
});

console.log(bob.name);
//returns that "params" is undefined in Civil class

如果我不在 Civil 类中使用 params 并简单地将 this.gold 设置为 int,则一切正常,并且 Bob.gold 返回 int,Bob .name 返回“Bob”,Bob.race 返回“Human”。

这是我第一次尝试类(制作一个小游戏),我并不完全理解类继承是如何工作的。

最佳答案

params传递给super()。否则,类 Civil 会在没有任何参数的情况下启动,并且无法访问传递给 NPC 的参数。此外,您还可以将 this 变量的赋值缩短一些。

class Civil {
  constructor(params) {
    if(!params) throw new Error("Params must be set")
    this.gold = params["gold"] ? params["gold"] : 0;
  }
}

class NPC extends Civil {
  constructor(params) {
    if(!params) throw new Error("Params must be set")
    super(params); // <-- pass them here.
    this.name = params["name"] ? params["name"] : "No name defined";
    this.race = params["race"] ? params["race"] : "No race defined";
  }
}

var bob = new NPC({
  "name": "Bob",
  "race": "Human",
  "gold": 10
});

console.log(bob.name);
//returns that "params" is undefined in Civil class

关于javascript - 类参数的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52354456/

相关文章:

java - 如何在不同的类中打印一个类中定义的字符串?

c++ - g++ 编译器不会为未定义的方法生成错误/警告

python - 如何使一个函数可以被一个类使用但不能被它的python子类使用

c++ - 我是否需要对 K 类进行完整排序才能使用 std::map<K, L>

javascript - Jest 测试因 refs 和 Form 而失败

javascript - 当在输入字段上按下转义键而不是在该输入字段的模糊事件上时,你会怎么做?

javascript - 实现文本区域拖放

javascript - 使用 Javascript 延迟页面关闭?

javascript - 如何返回SweetAlert2输入的值?

Jquery:如果类存在