@Richswitch
junior

Как понять когда нужен this в ООП, а когда нет?

Привет!
Пользуюсь eslint, который выдает мне ошибку class methods use this когда я пишу метод без чего либо что имеет контекст this. И тут у меня вштал вопрос. Зачем мне это нужно если я могу обойтись, в определенном участке кода, без this, используя только const let.

Также я использую опен-сорсовый код для календаря. В котором переменные задаются вот так:
findBlocks: function() {
        this.popup = $('.datepicker__calendar');
        this.prev = $('.calendar__button_type_prev');
        this.next = $('.calendar__button_type_next');
        this.header = $('.calendar__button_type_current');
        this.fieldInput = $('.datepicker__input');

        this.content = $('.calendar__content');
        this.yearsWrap = $('.calendar__years');
        this.datesWrap = $('.calendar__dates');
        this.monthsWrap = $('.calendar__months');

        this.today = $('.calendar__today');

        return this;
      },

правда тип использовал старый стандарт, но это не имеет значения, я запросто могу задать переменные var в рамках этого метода

Но теперь объясните мне когда нужно использовать this контекст?
Как объявлять переменные в методах:
Вот так?
const users = document.querySelectorAll('.event-users__filter-users');

Или так?
this.users = document.querySelectorAll('.event-users__filter-users');
  • Вопрос задан
  • 903 просмотра
Решения вопроса 1
@vith77
Это по сути функция конструктор. Если вызвать ее с new эти переменные станут свойствами созданного объекта. this не используется для создания переменных, this это контекст который зависит от того как функцию вызвали. Всего есть 4 способа) Вызов просто как функцию 2)Вызов с new 3) Вызов как функция объекта 4) Вызова с помощью call, apply.

Использование var, const, let это вообще о другом - это о создании переменных в некоторой области видимости (глобальная, внутри функции или блока)

В примере с const users = создали переменную, в пример с this.users = создали свойство у того объекта на которое указывает this.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vitstr
Front-end developer
Если используете сахар классов из es2015 - юзайте второй способ.

UPD: Поспешил.. Я так понимаю, классы вы и так юзаете.
Если вы переменную используете только в методе, используйте let/const. А в том случае, если данные вам нужны в экземпляре класса - то определяйте св-ва и используете их через this.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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