Автоматический запуск функции внутри объекта при вызове этого объекта - PullRequest
1 голос
/ 20 июня 2020

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

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

Вот код, который у меня есть ...

function addRadiatedStatus(){
    character.radiated = true;
}

const textNodes = [
    {
        id: 1,
        text: "Do you want to help this person?",
        options: [
           {
            text: "Yes",
            nextText: 2
           },
           {
            text: "No",
            nextText: 2
           },
        ],
        faction: "Greaser"
    },
    {
        id: 2,
        text: "It was a trap, do you run or kill them?",
        options: [
           {
            text: "Run",
            nextText: 3,
            damage: 0,
           },
           {
            text: "Kill",
            nextText: 5,
            damage: 8,
            moneyDrop: 20,
            radiationDamage: 2,
            function: function update(){
            if(character.greaser == true && textNodes[1].faction == 
            "greaser"){
                console.log("greaser check worked");
            }
                console.log("upadte function worked")
            character.health -= this.damage;
            character.cash += this.moneyDrop;
            character.radiationLevel += this.radiationDamage;
            character.maxHP -= this.radiationDamage;
            if(this.radiationDamage >= 1 ){
                addRadiatedStatus();
            }
            console.log("character HP" + " " +  character.health);
            console.log("character maxHP" + " " +  character.maxHP);
            console.log("moneyDrop " + " " +  this.moneyDrop);
            console.log("character cash" + " " +  character.cash);
            console.log("radiation level" + " " +  character.radiationLevel);
            console.log("character Raditated?" + " " +  character.radiated);

            }
           }
        ],
        faction: "Greaser",
    }
]

textNodes[1].options[1].function();

Я пробовал несколько разных вещей, включая добавление еще одного ключа run: update(), run: this.update(), run: this.function, et c.

I я также немного смущен, потому что я думал, что ES6 позволяет мне удалить ключевое слово function, но это, похоже, не разрешено (я, вероятно, просто делаю это неправильно или сталкиваюсь с проблемой в зависимости от того, как я настроил свой объект).

Я не уверен, как go от вызова textNodes[1].options[1].function к динамическому вызову той функции, которая вложена в указанный c вариант выбора.

Заранее благодарим за помощь.

1 Ответ

0 голосов
/ 20 июня 2020

Вы можете изменить этот раздел на следующий:

update: (function(){
        console.log("upadte function worked")
        character.health -= this.damage;
        character.cash += this.moneyDrop;
        character.radiationLevel += this.radiationDamage;
        character.maxHP -= this.radiationDamage;
        if(this.radiationDamage >= 1 ){
            addRadiatedStatus();
        }
        console.log("character HP" + " " +  character.health);
        console.log("character maxHP" + " " +  character.maxHP);
        console.log("moneyDrop " + " " +  this.moneyDrop);
        console.log("character cash" + " " +  character.cash);
        console.log("radiation level" + " " +  character.radiationLevel);
        console.log("character Raditated?" + " " +  character.radiated);
    });

Ключевое слово function было изменено на update, затем функция была изменена на анонимную функцию ... Вы должны воздержаться от используя js ключевых слов для заданных пользователем. Тогда анонимная функция не будет выполняться, пока вы ее не вызовете:

textNodes[1].options[1].update()

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

var text = [
    {
          data1: "here",
    	  data2: (function(){
	       	 return "You have to explicitly call me!"
	  })
    }
]
console.log("Without calling any data:   " + text[0])
console.log("When you call data2:   " + text[0].data2())
console.log("Let us access data1:   " + text[0].data1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...