首页 > 解决方案 > 更改许多父属性而不将它们全部写出来

问题描述

有没有办法让我将 Warrior.stats 中的值与 Character.stats 中的值相关联,而无需为每个角色实例编写以下内容?

this.level = 4,
this.vitality = 11,
etc...

换句话说,始终将 CharacterChild.stats 写为数字数组。

class Character {
    constructor(name, sex, gift, physique, stats) {
        this.name = name;
        this.sex = sex;
        this.gift = gift;
        this.physique = physique;
        this.stats = ['level', 
                      'vitality', 
                      'attunement', 
                      'endurance', 
                      'strength', 
                      'dexterity', 
                      'resistance', 
                      'intellegence', 
                      'faith', 
                      'humanity']
    }
}
class Warrior extends Character {
    constructor(name, sex, gift, physique, stats){
        super(name, sex, gift, physique, stats)
        this.stats = [4, 11, 8, 12, 13, 13, 11, 9, 9]
    }
 }

let dave = new Warrior('pla','ce','hold','er')
return dave.stats.level
//4

标签: javascriptobjectinheritance

解决方案


使用休息和传播:

class Warrior extends Character {
    constructor(...args) {
        super(...args);

另一种选择是使用类字段this.stats并完全省略构造函数(super将自动调用,使用与调用子类相同的参数):

class Warrior extends Character {
    stats = [4, 11, 8, 12, 13, 13, 11, 9, 9]
}

推荐阅读