У меня есть подкласс, который делает некоторые вещи проверки, которые вызывают метод в родительском классе, который его расширяет, это работает во всех местах, кроме случаев, когда мне нужно получить доступ к локальной области в родительском классе, см. Пример ниже
подкласс
export default class ElementEvent extends Core {
constructor(events){
super(events);
this.validation = this.validateEvent();
this.element = this.getElement();
this.triggered = false;
this.player = false;
this.waitForElementDelay = 3000;
if (this.validation){
if (this.element){
this.processEvent();
} else {
this.waitForElement();
}
}
waitForElement(){
const interval = setInterval(()=>{
const el = this.getElement();
if (el){
this.element = el;
this.processEvent();
clearInterval(interval);
}
}, this.waitForElementDelay)
}
}
родитель
export default class Reading extends ElementEvent {
constructor(event) {
super(event);
this.readingZoneHeight = 50;
this.wordsPerMinute = 300;
this.timer = 0;
}
processEvent() {
//this.elementEntryPoint = this.getElementEntryPoint();
//this.elementExitPoint = this.getElementExitPoint();
console.log(this);
console.log(this.readingZoneHeight);
window.addEventListener('scroll', () => {
console.log('Inside Event Listener ' + this.readingZoneHeight);
//this.handleWindowScroll();
});
}
}
Когда я консольный журнал, это показывает класс чтения со всеми реквизитами, он должен читатьZoneHeight, wordsPerMinute и т.д., Но this.readingZoneHeight не определен, однако внутри прослушивателя событий this.readingHeight - правильное значение, поэтому не уверен, что происходит здесь?
Кто-нибудь может помочь?
Это происходит потому, что вы вызываете Reading
processEvent
метод из конструктора ElementEvent
. Таким образом, это фактически называется частью вызова super(event)
в конструкторе класса Reading
.
И поскольку super(event)
происходит до того, как вы на самом деле назначили что-либо для this.readingZoneHeight
он не undefined
во время его регистрации.