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
调用,同时仅在单个位置修改它