evgeniy8705
@evgeniy8705
Повелитель вселенной

Как создавать внутренние переменные в классе?

Как внутри класса лучше создавать и использовать внутренние переменные? Чет сообразить не могу...

Код для примера:
class Voter {
  constructor(options) {
    Voter.elem = options.elem; // или this.elem? или Voter._elem? или this._elem?
    Voter.options = options; // или this.options? или Voter._options? или this._options?
    
    Voter.vote = Voter.elem.querySelector(`.vote`);
    
    Voter.elem.onclick = event => {
      if (event.target.closest(`.down`)) {
        this._voteDecrease();
      } else if (event.target.closest(`.up`)) {
        this._voteIncrease();
      }
    };
    
    Voter.elem.onmousedown = () => false;
  }
  
  _voteDecrease() {
    Voter.vote.innerHTML = +Voter.vote.innerHTML - 1;
  }
  
  _voteIncrease() {
    Voter.vote.innerHTML = +Voter.vote.innerHTML + 1;
  }
  
  setVote(value) {
    Voter.vote.innerHTML = +value;
  }
}

class doubleVoter extends Voter {
  constructor(options) {
    super(options);
  }
  
  _voteDecrease() {
    Voter.vote.innerHTML = +Voter.vote.innerHTML - Voter.options.steps;
  }
  
  _voteIncrease() {
    Voter.vote.innerHTML = +Voter.vote.innerHTML + Voter.options.steps;
  }
}

let voter = new doubleVoter({
  elem: document.body.querySelector(`.voter`),
  steps: 2
});

voter.setVote(20);
  • Вопрос задан
  • 622 просмотра
Пригласить эксперта
Ответы на вопрос 2
@furrya_black
let _idCounter = 0;
const getId = () => _idCounter += 1;

class Voter {
  constructor(options) {
     // тут свойства через this
     //  но никто не мешает положить сюда функцию, но так не делают
    this.id = getId();
    this.smth = () => 'smth';
    this.firstName = '';
    this.surname = '';
  }
  
    // это метод, он будет в прототипа объекта класса
    // в отличие от свойств, методов, объявленных в конструкторе
    _voteDecrease() {
       // так же this, не Vote
       this.vote.innerHTML = +Voter.vote.innerHTML - 1;
   }
    
    // геттеры и сеттеры
    get fullName() {
       return this.firstName + ' ' + this.surname;
    },

    set fullName(value) {
    var split = value.split(' ');
    this.firstName = split[0];
    this.surname = split[1];
   }

    // статические методы
    static stMethod(a, b) {
        return a + b;
    }

}


https://learn.javascript.ru/descriptors-getters-setters

https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
Комментировать
teknik2008
@teknik2008
Расскажите про GOLANG. Мне интересно
По идеи надо не Voter.vote а this.vote писать в методах, а переменные определить в constructor как
this.myVar='my value'
И она будет доступна во всех методах как this.myVar, также в наследниках
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы