Javascript 将属性名隐式传递给对象方法的正确方法是什么?
我正在制作一个游戏,我将角色的资源存储为包含数据和样式信息的对象Javascript 将属性名隐式传递给对象方法的正确方法是什么?,javascript,reflection,standards,Javascript,Reflection,Standards,我正在制作一个游戏,我将角色的资源存储为包含数据和样式信息的对象 class Resource { constructor(_name, _min, _max, _color){ this.name = _name this.className = "character-" + _name this.max = _max this.min = _min this.current = _
class Resource {
constructor(_name, _min, _max, _color){
this.name = _name
this.className = "character-" + _name
this.max = _max
this.min = _min
this.current = _max
this.color = _color
}
}
}
要创建一个名为“energy”的资源,最简单的方法是在我的角色中添加this.energy=CharacterResource(“energy”,010000xeeee)
。但是,由于我计划经常使用此模板,我想知道是否有一种方法可以自动使资源的\u name
属性等于它被分配到的角色的属性
我尝试使用Object.getOwnPropertyNames()
,但正如预期的那样,返回的值是添加属性之前的值。由于这一点的全部目的是简化资源创建过程,因此我发现稍后实现这一过程的一个快速方法是:
this.energy
this.constructResource()
this.health
this.constructResource()
this.mana
this.constructResource()
...etc
其中constructResource
是一个类方法,它使用Object.getOwnPropertyNames()
获取添加的最后一个属性并从中操作它。为了可读性(和美观,我必须承认),我把它改为:
this.energy ; this.constructResource()
this.health ; this.constructResource()
this.mana ; this.constructResource()
...etc
然而,将两个不相关的语句放在一行中感觉就像是一种代码气味。这是一种好的做法吗
如果这过于主观,那么当您将方法名称的值指定给前者时,是否有更好和/或已经标准化的方法将方法名称隐式传递给方法?您可以使用默认名称参数将每个方法包装到另一个方法中
const energyFactory = (min, max, color) => new Resource("energy", min, max, color);
class Character {
constructor() {
this.energy = energyFactory(0, 100, 0xEEEEEE);
}
}
这样,如果以后特定属性(如名称)有任何其他“静态”值,则可以轻松地在工厂中添加该值,并将其应用于所有
energyFactory
调用,同时仅在单个位置对其进行修改。您可以使用默认名称参数将每个方法包装到另一个方法中
const energyFactory = (min, max, color) => new Resource("energy", min, max, color);
class Character {
constructor() {
this.energy = energyFactory(0, 100, 0xEEEEEE);
}
}
这样,如果以后特定属性(如名称)有任何其他“静态”值,则可以轻松地将其添加到工厂中,并将其应用于所有energyFactory
调用,同时仅在单个位置修改它