Класс Scope с методом, вызываемым из подкласса JS

1

У меня есть подкласс, который делает некоторые вещи проверки, которые вызывают метод в родительском классе, который его расширяет, это работает во всех местах, кроме случаев, когда мне нужно получить доступ к локальной области в родительском классе, см. Пример ниже

подкласс

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 - правильное значение, поэтому не уверен, что происходит здесь?

Кто-нибудь может помочь?

  • 0
    Вы должны были указать, где это не определено. Это как найти иголку в стоге сена
Теги:
class
ecmascript-6

1 ответ

1
Лучший ответ

Это происходит потому, что вы вызываете Reading processEvent метод из конструктора ElementEvent. Таким образом, это фактически называется частью вызова super(event) в конструкторе класса Reading.

И поскольку super(event) происходит до того, как вы на самом деле назначили что-либо для this.readingZoneHeight он не undefined во время его регистрации.

  • 1
    Ах, да, это имеет смысл, я переместил реквизиты из конструктора в метод processEvent, и он отлично работает :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню