Arrow Functions und THIS
Fredl
- javascript
Grüß euch,
Streite gerade mit JavaScript.
Gab's da nicht mal was in die Richtung dass sich das this
Keyword zwar in einer "normalen" Funktion (so nicht Werte effektiv angehängt) an dem Window
Objekt ausrichtet, sich in einer arrow function
aber immer nach dem engeren Scope streckt?
const einmalThisArrow = {
dasDisKiewoeadArrow: () => {
return this;
}
}
console.log("einmalThisArrow?: ", einmalThisArrow.dasDisKiewoeadArrow());
...ergibt aber trotzdem das Window
Objekt 😱
Ich bin verwirrt, indigniert, SCHOCKIERT!
Hallo Fredl,
das ist völlig simpel und in wenigen Worten erklärt 🤮
In einer function ist das this-Keyword an den Kontext der Funktion gebunden. Das ist
null
In einer Pfeilfunktion ist das this-Keyword an den Kontext gebunden, in dem die Pfeilfunktion definiert wurde. Du hast das Objektliteral im globalen Kontext definiert.
Ich hätte hier auch nochmal eine Abhängigkeit von strict mode unterstellt, aber das ist nicht so. this
im globalen Kontext ist das globale Objekt.
TL;DR: eine Pfeilfunktion als Methode zu definieren ist nicht die beste Idee.
Rolf
Hallo Fredl,
im Wiki gibt es zwei Abschnitte, in denen this
erklärt wird. Da besteht allerdings Renovierungsbedarf; die Abschnitte sind redundant.
Objekte und ihre Eigenschaften - hier sollte eine vollständige Erklärung hin
Objektverfügbarkeit und this - dieser Artikel sollte sich auf Closures beschränken
Dass eine Pfeilfunktion this
nicht neu bindet, steht hier - allerdings nur im Nebensatz. Und in den Artikeln über this
findet sich das im Moment gar nicht.
Edith sagt: Jetzt schon
Rolf
Hallo Fredl,
Streite gerade mit JavaScript.
fiel fergnügen. 😉
Unabhängig von deinem eigentlichen Anliegen, zu dem ich mangels Detailwissen nicht wirklich beitragen kann: Viele Programmiersprachen sind case-sensitive, unterscheiden also strikt zwischen Groß- und Kleinschreibung.
Auch Javascript gehört dazu. Es ist also kontraproduktiv, ein Schlüsselwort, das die Sprache in Kleinbuchstaben definiert (this), im Betreff in Großbuchstaben zu schreiben (THIS).
Einen schönen Tag noch
Martin