繁体   English   中英

将属性名称隐式传递给 object 方法的正确方法是什么?

[英]What is the correct way to implicitly pass property names to object methods?

我正在制作一个游戏,我将角色的资源存储为包含数据和样式信息的对象

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", 0, 100, 0xEEEEEE) 然而,由于我打算经常使用这个模板,我想知道是否有办法自动让资源的_name属性等于分配给它的角色的属性。

我尝试使用Object.getOwnPropertyNames()但正如预期的那样,返回的值是添加属性之前的值。 由于这样做的全部目的是简化资源创建过程,我发现稍后发生的一种快速方法是:

this.energy
this.constructResource()
this.health
this.constructResource()
this.mana
this.constructResource()
         ...etc

其中constructResource是一个class 方法,它使用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调用,同时仅在单个位置修改它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM