@Returb0

Как переделать класс из ES5 в ES6?

Попытался переделать ES5 под стандарт ES6, то что-то пошло не так, а где ошибка понять не могу.
Может быть кто разбирается в данном стандарте и построении классов в частности

Исходник "класса" на ES5:
function Popup(options){
    this.modal = $("options.modal");
    this.overlay = $("options.overlay");
    var self = this;

    this.open = function(content){
        self.modal.html(content);
        self.modal.addClass("open");
        self.overlay.addClass("open");
    }
    this.close = function(){
        self.modal.removeClass("open");
        self.overlay.removeClass("open");
    }

    this.overlay.on("click", this.close);
}



var p = new Popup({
    modal: ".modal",
    overlay: ".overlay"
});

$(".write").on("click", function(){
    p.open("TEXT");
})


Моя неудачная попытка переделать класс на ES6:
class Popup{
  constructor(options){
    this.modal = $(options.modal);
    this.overlay = $(options.overlay);
    var self = this;  
    this.overlay.on("click", this.close);  
  }

    open(content){
        self.modal.html(content);
        self.modal.addClass("open");
        self.overlay.addClass("open");

    }
    close(){
        self.modal.removeClass("open");
        self.overlay.removeClass("open");
    }


}



var p = new Popup({
    modal: ".modal",
    overlay: ".overlay"
});

$(".write").on("click", function(){
    p.open("TEXT");
})
  • Вопрос задан
  • 520 просмотров
Решения вопроса 3
profesor08
@profesor08 Куратор тега JavaScript
Удали var self = this;
Замени selfна this
Ответ написан
nikolayshabalin
@nikolayshabalin
Автор профессиональных курсов в HTML Academy
В методох open и close замени self на this
Ответ написан
class Popup{
    constructor(options) {
        this.modal      = $(options.modal);
        this.overlay    = $(options.overlay);

        this.overlay.on('click', this.close.bind(this));
    }

    open(content){
        this.modal.html(content);
        this.modal.addClass('open');
        this.overlay.addClass('open');
    }
    close(){
        this.modal.removeClass('open');
        this.overlay.removeClass('');
    }
}


Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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