Задать вопрос
@V0vash

На что ссылается this при данной вложенности?

Есть модуль, в нём есть метод (объявляет плеер и вызывает this.onPlayerStateChange)
Привязав к контексту в конструкторе получаю ожидаемый результат ( коммент )
Но решив привязать к контексту прям при создании плеера, получил аналогичный результат (выполняет те-же ожидаемые действия) с чем это связано? как понять откуда пришёл контекст VideoPlayer?
export default class VideoPlayer {
    constructor(triggers, popup) {
        this.btns = $$(triggers);
        this.overlay = $$(popup);
        this.close = $$('.close', this.overlay);
        // this.onPlayerStateChange = this.onPlayerStateChange.bind(this);
    }
...
 createPlayer(url){
        this.player =  new YT.Player('frame', {
            height: '100%',
            width: '100%',
            videoId: `${url}`,
            events: {
               'onStateChange': this.onPlayerStateChange.bind(this)
              }
        });

        this.overlay.style.display ='flex';
    }
  • Вопрос задан
  • 160 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
Robur
@Robur
Знаю больше чем это необходимо
this при любой вложенности содержит тот this который был установлен при вызове функции в которой эта строка выполняется.

В вашем случае:

в первом варианте - this установлен для конструктора в создаваемый объект. bind(this) привяжет к создаваемому объекту. результат записывается обратно в onPlayerStateChange - поэтому теперь откуда бы эта функция не была вызвана, она будет привязана к созданому объекту (инстанс VideoPlayer)

во втором варианте - bind(this) привяжет к тому this который установлен для вызова createPlayer. Это значение зависит от того как createPlayer была вызвана.
Если просто player.createPlayer, то в this будет player (инстанс VideoPlayer), соответственно он и пойдет в bind(this)
привязанная функция будет передана как обработчик но сама onPlayerStateChange не меняется и остается не привязанной.

YT.Player тут вообще никак не участвует и не играет роли.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы