Изменение значений переменной класса

Заранее прошу прощения, если это что-то прямолинейное. Я немного не понимаю, какие технические термины мне нужны для поиска документации по этому вопросу. Это довольно простой материал. У меня есть класс, экземпляр этого класса и функция, которую я хочу запустить, которая изменила бы одно из значений, установленных в конструкторе класса. Ниже вы найдете эффективный пример, к которому я и стремлюсь.

class CLASS {
  constructor(name) {
    this._name = name;
    this._round = 0;
    this._wins = 0;
    this._losses = 0;
  }

  get name(){
    return this._name;
  } 

  ...

}

const PL1 = new CLASS('Player 1');

...

function updatePL(player, pointsFor, pointsAgainst) {
  if (pointsFor > pointsAgainst) {
    return player.wins++ } else if ...
  ...

}



console.info(PL1); // Prebiously "console.info(player)" Edited. Not source of issue in actual code.  

updatePL(PL1, 1, 0);

console.info(PL1); //No changes

Я пробовал различные средства сложения и вычитания как внутри, так и вне функции. Я в тупике. Более того, я без проблем выполнял довольно похожие шаги внутри чего-то вроде этого:

object = [{
  a: 1,
  b: 2,
  },
  {
    ...
  }];

Опять же, технические термины ускользают от меня, поэтому я не знаю, что искать. Любая информация, даже если она просто указывает мне на неопределенное направление поискового запроса Google, была бы потрясающей. Спасибо.

Можете ли вы опубликовать полный код без ..., так что у нас есть минимальный воспроизводимый пример?

CertainPerformance 30.12.2018 02:12

Похоже, ваш класс не определил сеттер set wins(). Так как вы ожидаете, что модификация classInstance.wins повлияет на classInstance._wins?

connexo 30.12.2018 02:14
console.info(PL1);, а не console.info(player);
zipzit 30.12.2018 02:14

Учитывая ваш текущий код, player существует только внутри updatePL.

connexo 30.12.2018 02:16

@connexo ... Ах. Конечно, было что-то в этом роде. Ты звезда. Спасибо!

MitsiBerryTeriyaki 30.12.2018 02:28

player передается по ссылке, поэтому он не должен существовать только внутри функции, верно

chiliNUT 30.12.2018 02:48

Не добавляйте в вопрос такие вещи, как "Это было решено", используйте встроенные методы, чтобы принять данный ответ или создать самостоятельный ответ.

Asons 30.12.2018 15:44
Поведение ключевого слова "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) для оценки ваших знаний,...
0
7
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете захотеть console.info(PL1) вместо console.info(player), потому что проигрыватель является локальным для вашей функции updatePL. Также вы использовали _wins в классе, но wins в updatePL, поэтому убедитесь, что вы используете то же самое.

Между тем, зачем объявлять PL1 постоянным, когда вы его мутируете? Также вам не нужно возвращать player.wins из updatePL, вы всегда можете получить доступ к этой опоре из самого объекта, например, PL1.wins. или PL1.your_getter

PL1 объявлен как константа, потому что он всегда должен ссылаться на объект, определенный классом. Если я ошибаюсь и случайно набираю что-то вроде «PL1 = 1», при запуске выдается ошибка. До сих пор я не сталкивался с какими-либо проблемами при работе со значениями внутри объекта. Я мог ошибаться или что-то не замечать. Я очень сильно отстаю от всего, что могло бы походить на компетенцию. Как вы, вероятно, можете сделать вывод по моей неспособности добавить правильные имена переменных к чему-то столь же простому, как console.info при вводе фрагмента примера. Ха. Думаю, если я за много миль от бара. Дай мне знать. :)

MitsiBerryTeriyaki 30.12.2018 15:31

О, я понимаю, в этом есть смысл. Я не думаю, что вы столкнетесь с какими-либо проблемами при работе с const, так что вы не ошиблись. Лично я предпочитаю использовать его только с объектами, которые не собираюсь изменять, но они полезны в других защитных случаях, таких как ваш. :) Вы не отказываетесь от бара, мы все делаем ошибки на этом пути, и он бесконечен (всегда будет что-то новое, чему можно научиться).

user10469670 30.12.2018 20:53

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