Как изменить вывод функции внутри объекта - PullRequest
0 голосов
/ 09 мая 2019

Я новичок в javascript, поэтому я подумал, что мог бы начать что-то совершенно за пределами моей лиги. (Испытание огнем) Я работаю над боевой системой на основе текстовых сообщений для игры, использующей javascript. Я пытаюсь сослаться на свойство объекта из функции.

Я попытался включить document.getElementById в свойство объекта и сослаться на него как функцию с объектом.

Это первый набор, который я попробовал

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. ex (max * min)

В первом я пытался создать объект «существо» и создать свойства: имя, описание, здоровье и урон. В рамках свойства повреждения я пытался предоставить информацию функции randomNumber. Информация не извлекается, и я не уверен, что добавить для справки необходимую информацию.

Во втором я попытался создать функцию creatureDamge и сослаться на нее в свойстве урона. Это должно было создать определенную функцию для этого конкретного существа вместо того, чтобы пытаться создать функцию, которую я мог бы использовать для нескольких разных существ. При запуске второго он все еще не извлекал информацию из функции из объекта.

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Похоже, вы ищете какое-либо свойство, которое указывает на функцию, которую вы бы вызвали:

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.Например:

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)  
0 голосов
/ 09 мая 2019

Просто, чтобы вы знали, когда вы делаете это:

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

Функция creatureDamage выполняется на месте, с параметрами 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);

Поскольку вы присваиваете "basic_damage" без () вашей функции Damage_, функция не выполняется при создании вашего объекта.Таким образом, свойствоmage_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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...