Ich habe eine Unterklasse, die einige Validierungsaufgaben ausführt, die eine Methode in der übergeordneten Klasse aufrufen, die sie erweitert. Dies funktioniert an allen Stellen, außer wenn ich auf den lokalen Bereich in der übergeordneten Klasse zugreifen muss (siehe Beispiel unten)
Unterklasse
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)
}
}
Elternteil
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();
});
}
}
Wenn ich ein Konsolenprotokoll anführe, wird hier eine Leseklasse mit allen Requisiten angezeigt, die ZoneHeight, wordsPerMinute usw. lesen sollen. This.readingZoneHeight ist jedoch nicht definiert. Im Ereignis-Listener ist this.readingHeight jedoch der richtige Wert. Sie sind sich also nicht sicher, was hier passiert.
Hilft jemand?
Dies geschieht, weil Sie die Methode Reading
's processEvent
vom Konstruktor des aufrufen ElementEvent
. Dies wird also tatsächlich als Teil des super(event)
Aufrufs im Konstruktor der Reading
Klasse aufgerufen .
Und da super(event)
dies geschieht, bevor Sie dem Objekt tatsächlich etwas zuweisen, this.readingZoneHeight
erfolgt dies undefined
zum Zeitpunkt der Protokollierung.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen