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