@Nospower

Вопрос про класс и его прототип?

Доброго времени суток! Знаю что нужно пользоваться новым стандартом языка, но я пока в начале пути и хочу для начала разобраться в старом синтаксисе. Суть вопроса: есть некий класс Popup для всплывающего окна с объявленными свойствами, и 2 его прототипа: 'open' и 'close' . Идея такова: метод 'open' я могу повесить на нажатие, допустим, произвольной кнопки, вне класса. А метод 'close' должен быть внутри конструктора. И всё бы хорошо, но если методы записывать как прототипы, то 'close' перестаёт работать и в прототипах не видно переменной , в которой лежит 'this'. В коде в комментариях написал вопросы.
JSFiddle https://jsfiddle.net/715p8eL3/
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
@karambafe
и в прототипах не видно переменной , в которой лежит 'this'.


Так она в this и не записана, надо вот так делать:
this.popup = this // хотя это абсолютно бессмысленно


И всё бы хорошо, но если методы записывать как прототипы, то 'close' перестаёт работать и в прототипах не видно переменной

this.overlay.on('click', this.close);
Тут идет потеря контекста, если сделать в методе close console.log(this), то увидите в this обычную DOM ноду, а не jq объект. Соответсвенно там и не будет метода removeClass

//  Это решение проблемы, но не решение очень странного, на мой взгляд, кода
Popup.prototype.close = function(){
  $(this).removeClass('open');
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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