Используйте одну и ту же переменную для метода и свойства в объекте

#javascript #object

#javascript #объект

Вопрос:

после 1 часа попыток выяснить, как я могу заставить это работать, я сдался и решил спросить здесь.

Итак, я создал объект :

 var potion1 = {
        color: "red",
        effect: "strength",
        duration: 1 " minute",
        price: 10,
        test: function() {
            return "test good"
        }
    }
 

И то, что я делаю, это запрашиваю ввод и показываю соответствующий текст.

 var x = prompt();
x = document.getElementById("potions").innerHTML="Potion 1 : "   potion1[x];
 

Проблема в том, что все отлично работает с цветом, эффектом, продолжительностью, ценой, но возврат теста function() { return "test good" }

Если я использую x = document.getElementById("potions").innerHTML="Potion 1 : " potion1[x](); test, работает нормально, но все остальные ничего не возвращают

Поэтому мне было интересно, возможно ли, чтобы x работал с цветом, эффектом, продолжительностью, ценой и тестированием.

Комментарии:

1. простым ответом было бы превратить все в функцию

2. Вы пытались сделать условное присвоение innerHTML, например, с innerHTML="Potion 1 : " typeof potion1[x] == 'function' ? potion1[x]() : potion1[x] помощью ? Это так называемый условный (троичный) оператор. Вы можете узнать больше об этом по адресу developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /…

Ответ №1:

Вы можете создать test средство получения.

 var potion1 = {
    color: "red",
    effect: "strength",
    duration: 1   " minute",
    price: 10,
    get test() {
        return "test good"
    }
}
 

Ответ №2:

простым ответом было бы превратить все в функцию

или вы могли бы использовать троичный оператор:

 x = document.getElementById("potions").innerHTML="Potion 1 : "   
       (typeof potion1[x] != 'function' ? potion1[x] : potion1[x]());