Orlok: wie Zugriff auf Javascript-Funktion?

Beitrag lesen

Hallo Felix

window.myApplication = {
  MyObject: (element, data) => {
    // ...
  }
};

So funktioniert das nicht. Pfeilfunktionen können nicht als Konstruktor verwendet werden. Du müsstest stattdessen entweder einen gewöhnlichen Funktionsausdruck verwenden oder einen Klassenausdruck.

window.myApplication = {
    MyObject: class {
        constructor(element, data) {
            // ...
        }
    }
};

Pfeilfunktionen besitzen gar keine Bindung für this. Wenn du innerhalb einer Pfeilfunktion auf this zugreifst, wird der Wert der Variable im umgebenden Scope zurückgegeben.

  ajaxData: {},
  save: () => {
    console.log(this.ajaxData);
  }

Das hier wird dir also undefined in die Konsole schreiben, da this außerhalb der Funktion eine Referenz auf Window enthält und Window keine Eigenschaft mit diesem Namen besitzt.


Besonders zu beachten ist dabei, dass du bei einem Aufruf dieser Methode keine Fehlermeldung bekommen würdest, selbst dann, wenn du das Skript im strict mode ausführst.

'use strict';

function f() {
    return this.x;
}

f();

Das gibt einen Typfehler, weil diese Funktion ein eigenes this besitzt, das im strikten Modus außerhalb eines Konstruktoraufrufs undefined ist.

'use strict';

const object = {
    f: () => {
        return this.x;
    }
};

object.f();

Das gibt keinen Fehler, weil this über die scope chain zu Window aufgelöst wird.


Wenn du innerhalb einer Methode über this auf das Kontextobjekt zugreifen möchtest, kannst du die Syntax für Methodendefinitionen verwenden:

    ajaxData: {},
    save() {
        console.log(this.ajaxData);
    }

Viele Grüße,

Orlok