1

複数のプロパティを簡単に指定する方法はありますか? たとえば、私はこれをやろうとしていました:

object = new Spell( 50, 30, 5, 1, 30, 10 );
object = new Buff( "Armor", 50, 5 );

function Spell( baseDmg, dmgPerLvl, cd, cdPerLvl, cost, costPerLvl ) { 
this.baseDmg = baseDmg;
//...
//etc
// base damage, damage per level, cooldown, cooldown per level, cost, cost per level
}

function Buff( type, amount, duration );
this.type = type;
//etc
}

これらは 2 つの例にすぎませんが、1 つのオブジェクトに多くの「プロパティ」を与えたい場合、どうすればよいでしょうか? 私が行った方法では、以前の新しいスペル プロパティが削除され、バフ属性のみが付与されます。非常に長い配列にすべて手動で書き込む必要なく、上で書いたようにそれを行う方法はありますか?

そして、誰かがコードが読めないと言う前に、それは本当かもしれませんが、私はそれを完全に Excel で書きました。可能であれば、この方法に固執することをお勧めします。

この件についてご協力いただきありがとうございます。事前に感謝します。

編集:

Blender の正しい方向性を示してくれてありがとう。役立つ情報源をいくつか見つけました。次の解決策は良いものでしょうか、それとももっと良い方法があると思いますか?

object = new Spell( 50, 30, 5, 1, 30, 10 );
Spell.prototype.extendBuff = function( baseCC, ccPerLvl, ccText ) {
        this.baseCC = baseCC;
    this.ccPerLvl = ccPerLvl;
    this.ccText = ccText;
}
object.extendBuff( "Armor", 50, 5 );
4

1 に答える 1

3

何らかの方法で複雑なオブジェクトが必要になります。これは、OOP と継承を使用する私のお気に入りの方法です。

var Hero = function(name) {
    this.buffs = [];
    this.debuffs = [];
};
Hero.prototype = {
    cast: function(spell, target) {
        if(spell && spell.contructor === Buff) this.buffs.push(spell);
        // etc etc
    }
}

var Spell = function() { /* .... */};
var Buff = function() {
    Spell.apply(this, arguments);
}
Buff.prototype = Object.create(Spell.prototype, {
                constructor: {
                    value: Buff,
                    enumerable: false,
                    writable: true,
                    configurable: true
                }
            });
Buff.prototype.buffType = function() {}; //make sure this is after the Object.create line or it will get overriden

///////

var hero = new Hero('name');
hero.cast(new Spell('attack'), 'enemy');
hero.cast(new Buff('heal'), 'self');
于 2013-08-28T08:25:33.580 に答える