微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更改许多父属性而不将它们全部写出来

如何解决更改许多父属性而不将它们全部写出来

有没有办法让我将 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,stats){
        super(name,stats)
        this.stats = [4,11,8,12,13,9,9]
    }
 }

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

解决方法

休息和传播:

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

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

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

替换这一行:

this.stats = [4,9]

用这个覆盖你的 stats 属性名称数组:

[4,9].forEach((val,i) => {
  this[this.stats[i]] = val;
});

这将产生所需的结果:

this.level = 4,this.vitality = 11,...,this.humanity = 9

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,stats) {
    super(name,stats);
    
    // map values to stats names
    [4,9]
      .forEach((val,i) => {
        this[this.stats[i]] = val;
    });
  }
}

let dave = new Warrior('pla','ce','hold','er')
console.log(dave);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。