Javascript - передать аргумент функции в имя переменной

Я пытаюсь передать аргумент функции в переменную (если это возможно), чтобы уменьшить повторяемость кода и вложенные операторы if/операторы переключения. В ходе исследований я обнаружил, что ссылку на getElementById нужно заключать в кавычки, чтобы она отображалась как идентификатор. Главный вопрос, могу ли я передать аргумент в имя переменной?

<body>
<div class = "contain">
    <h3 id = "red">0</h3>
        <h3 id = "green">0</h3>
        <h3 id = "blue">0</h3>
    <button onClick = "player_one.addResource(4,green)">Add Green</button>
        <button onClick = "player_one.addResource(3,red)">Add Red</button>
        <button onClick = "player_one.addResource(7,blue)">Add Blue</button>
</div>

<script>
    var redResource = 0;
    var greenResource = 0;
    var blueResource = 0;

    var player_one = {
    addResource: function(num,color){
        (color)Resource += num
        document.getElementById(color).innerHTML =((color)Resource);
    }

    }

 </script>
 </body>
 --------------------------------------------------------------------
 --------------------------------------------------------------------
 //with a different approach, I still have an issue
  var player_one = {
addResource: function(num,color){
        player_one.color += num
        document.getElementById(color).innerHTML =    (player_one.color);
    },

  red: 0,
  green: 0,
  blue: 0


  }

ваш "другой подход" не будет работать лучше. смотри мой ответ ниже

Mister Jojo 28.02.2019 18:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вместо переменных вы можете использовать Object :

var resources = {
  red: 0,
  green: 0,
  blue: 0
};

var player_one = {
  addResource: function(num, color) {
    resources[color] += num;
    document.getElementById(color).innerHTML = resources[color];
  }
};

Этот не активировал идентификатор правильно. Однако, когда я попытался с уже выбранным идентификатором, результат innerHTML вернулся как NaN.

Soonerdev 28.02.2019 18:06

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

var player_one = {
addResource: function(num,color){

        player_one[color] += num
        document.getElementById(color).innerHTML =    (player_one[color]);
    },

  red: 0,
  green: 0,
  blue: 0


  }

// console.info(document.getElementById('green'))
<div class = "contain">
    <h3 id = "red">0</h3>
        <h3 id = "green">0</h3>
        <h3 id = "blue">0</h3>
    <button onClick = "player_one.addResource(4,'green')">Add Green</button>
        <button onClick = "player_one.addResource(3,'red')">Add Red</button>
        <button onClick = "player_one.addResource(7,'blue')">Add Blue</button>
</div>

чего вам не хватало, так это вызова функции со строковыми аргументами.. как в func(3, 'red'), а не func(3, red)

и в javascript player_one[color] а не player_one.color

(color)Resource вы пропустили один
epascarello 28.02.2019 17:59

Этот не активировал идентификатор правильно. Однако, когда я попытался с уже выбранным идентификатором, результат innerHTML вернулся как NaN.

Soonerdev 28.02.2019 18:05

Это сработало идеально! Я попробовал это на своей странице, но это все равно не сработало. Но я понял, что использовал двойные кавычки внутри двойных кавычек кнопки. Изменил на одинарные кавычки вокруг цвета, это сработало. Спасибо!

Soonerdev 28.02.2019 18:26

конечно, я рад :)

ashish singh 28.02.2019 18:26
Ответ принят как подходящий

это плохое кодирование, но вот ваш ответ:

var
  redResource = 0,
  greenResource = 0,
  blueResource = 0
;

var player_one = {
  addResource: function(num,color){
    window[color+'Resource'] += num;
    document.getElementById(color).innerHTML = window[color+'Resource'];
  }
}
#red { color:red }
#green { color:green }
#blue { color:blue }
<div class = "contain">
  <h3 id = "red">0</h3>
  <h3 id = "green">0</h3>
  <h3 id = "blue">0</h3>
  <button onClick = "player_one.addResource(4,'green')">Add Green</button>
  <button onClick = "player_one.addResource(3,'red')">Add Red</button>
  <button onClick = "player_one.addResource(7,'blue')">Add Blue</button>
</div>

Это также сработало идеально. На самом деле я столкнулся с подходом window[] в какой-то момент своего исследования, но не смог заставить его работать. Можете ли вы объяснить, почему это считается плохим кодированием? И подход window[] для меня нов. Есть ли ссылка, которая учит этому?

Soonerdev 28.02.2019 18:28

Я изменил этот ответ, так как это правильный ответ для того, как был поставлен вопрос. Хотя подход с созданием объектов был лучшим решением для моей общей цели. Является ли использование подхода window[] единственным способом вставить аргумент в имя переменной?

Soonerdev 28.02.2019 18:56

в то время как JS является объектом, но в вашем случае вы должны создать свой собственный объект как: var Ressource = { red:0, green:0, blue:0 }; и использовать его как: Ressource[color] += num;

Mister Jojo 28.02.2019 19:29

[все в JS является объектом]. использование окна [имя переменной] не является хорошей идеей. в этом верхнем объекте есть много свойств и методов, таких как window.length или window.name... (window['length'], window['name'], ...). и, возможно, завтра там, где окно ['синий'], окно ['красный'] в глобальной области окна, и ваш код больше не будет работать

Mister Jojo 28.02.2019 21:32

Другие вопросы по теме