如何解决更改许多父属性而不将它们全部写出来
有没有办法让我将 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 举报,一经查实,本站将立刻删除。