如何修改对象中的函数输出

时间:2019-05-09 02:55:23

标签: javascript function object

我是javascript的新手,所以我想我会完全脱离同盟。(试火)我正在为使用javascript的游戏开发基于文本的战斗系统。我正在尝试从函数中引用对象属性。

我尝试将document.getElementById包含在object属性中,并将其作为对象的函数引用。

这是我尝试过的第一套

function randomNumber(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

var creature = {
    name: "Creature",
    description: "Discription goes here.",
    health: 20,
    damage: document.getElementById('damageObject').innerHTML = randomNumber(4,8)
}

这是第二个

var creature = {
    name: "Creature",
    description: "Discription goes here.",
    health: 20,
    damage: creatureDamage(3,7)
}

function creatureDamage(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

在两种情况下,我都试图创建一个可以更改基于Math.random的函数中的值范围的属性。例如(最大*最小)

在第一个中,我试图创建对象“ creature”并创建属性:名称,描述,健康状况和损害。 在损伤属性内,我试图向函数randomNumber提供信息。没有信息被提取,我不确定要添加什么以引用所需的信息。

在第二个示例中,我尝试创建函数bioDamge并在损伤属性中对其进行引用。这是为该特定生物创建特定功能,而不是尝试创建可在多个不同生物之间使用的功能。运行第二个代码时,它仍然没有从对象中将信息提取到函数中。

2 个答案:

答案 0 :(得分:1)

听起来您正在寻找一个指向函数的属性,可以使用以下函数调用它:

creature.damage()

var creature = {
    name: "Creature",
    description: "Discription goes here.",
    health: 20,
    damage(min, max){
        return Math.floor(Math.random() * (max - min)) + min;
    }
}


console.log(creature.damage(1, 100))
console.log(creature.damage(1, 100))

或每次尝试使用creature.damage访问属性时都会调用该函数的getter。例如:

var creature = {
    name: "Creature",
    description: "Discription goes here.",
    health: 20,
    get damage(){
        // get min and max from somewhere
        return creatureDamage(1,100)
    }
}

function creatureDamage(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

console.log(creature.damage) // random values
console.log(creature.damage)  

答案 1 :(得分:0)

请注意,当您执行此操作时:

var creature = {
damage: creatureDamage(3,7)
}

当场执行bioDamage函数,其参数为3和7,结果将赋予对象的损伤属性。 我认为那不是你想要的。您可能希望每次生物攻击时都执行此功能,因此结果可能会有所不同。 在这种情况下,您应该这样创建对象:

var creature = {
min_damage: 3,
max_damage: 7,
}

然后在攻击过程中运行以下命令:

damage_given = creatureDamage(creature.min_damage , creature.max_damage);

如果您希望所调用的函数因生物而异,则可以执行以下操作

function basicDamage(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

function extendedDamage(min, max) {
    //the +9 is just something silly to make it different
    return Math.floor(Math.random() * (max - min)) + min + 9;
}

var creature1 = {
    min_damage: 3,
    max_damage: 7,
    damage_function = basicDamage
    }

var creature2 = {
    min_damage: 3,
    max_damage: 7,
    damage_function = extendedDamage
    }

var damage1 = creature1.damage_function(creature1.min_damage, creature1.max_damage);
var damage2 = creature2.damage_function(creature2.min_damage, creature2.max_damage);

由于您为damage_function分配了不带()的“ basic_damage”,因此在创建对象时不会执行该函数。因此,Damage_function属性指向您的函数,然后您可以在以后使用参数调用它。 您可以像这样清除代码。

function get_damage(creature)
{
    var damage = creature.damage_function(creature.min_damage, creature.max_damage);
    return damage;
}

var damage1 = get_damage(creature1);
var damage2 = get_damage(creature2);

或者走得更远,以便您可以运行任何破坏功能,只要您的生物具有该功能要使用的属性

basicDamage(creature) {
    return Math.floor(Math.random() * (creature.max_damage - creature.min_damage)) + creature.min_damage;
}

function extendedDamage(creature) {
    //now this function use an extra property which your creature needs to have
    return Math.floor(Math.random() * (creature.max_damage - creature.min_damage)) + creature.min_damage + creature.extra_damage;
}

var creature1 = {
    min_damage: 3,
    max_damage: 7,
    damage_function = basicDamage
    }

var creature2 = {
    min_damage: 3,
    max_damage: 7,
    extra_damage: 7,
    damage_function = extendedDamage
    }
function get_damage(creature)
{
    var damage = creature.damage_function(creature);
    return damage;
}

var damage1 = get_damage(creature1);
var damage2 = get_damage(creature2);