Контекст
this
теряется, если ваш метод вызывается не из экземпляра класса, в котором он объявлен. Нужно использовать
bind
, чтобы привязать функцию к экземпляру.
const show = element => {
element.classList.add('show');
}
class Modal {
constructor() {
this.modal = document.get...
}
open(endAction) {
show(this.modal);
endAction();
}
}
class Slider {
constructor() {
this.overlay = document.get...;
}
openSlider() {
show(this.overlay);
console.log(this); // Slider
}
openModal() {
const modal = new Modal();
modal.open(this.openSlider.bind(this));
}
}
Или с ES6 стрелочной функцией, результат один и тот же:
const show = element => {
element.classList.add('show');
}
class Modal {
constructor() {
this.modal = document.get...
}
open(endAction) {
show(this.modal);
endAction();
}
}
class Slider {
constructor() {
this.overlay = document.get...;
}
openSlider() {
show(this.overlay);
console.log(this); // Slider
}
openModal() {
const modal = new Modal();
modal.open(() => this.openSlider());
}
}