wie Zugriff auf Javascript-Funktion?
bearbeitet von OrlokHallo Felix
> ~~~ js, bad
> window.myApplication = {
> MyObject: (element, data) => {
> // ...
> }
> };
> ~~~
So funktioniert das nicht. Pfeilfunktionen können nicht als Konstruktur verwendet werden. Du müsstest stattdessen entweder einen gewöhnlichen Funktionsausdruck verwenden oder einen Klassenausdruck.
~~~JavaScript, good
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.
> ~~~ js, bad
> 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.
~~~JavaScript
'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.
~~~JavaScript
'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:
~~~JavaScript, good
ajaxData: {},
save() {
console.log(this.ajaxData);
}
~~~
Viele Grüße,
Orlok