Fredl: Arrow Functions und THIS

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!

  1. 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

    • bei einem Aufruf als Methode: Das Objekt zur Methode
    • bei einem normalen Aufruf
      • nicht im strict mode: das globale Objekt (a.k.a. window)
      • im strict mode: null
    • bei einem Aufruf über apply oder call: Das als Kontext übergebene Objekt
    • bei einer Kapselung mit bind: Das gebundene Objekt

    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

    --
    sumpsi - posui - obstruxi
  2. 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

    --
    sumpsi - posui - obstruxi
  3. 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

    --
    Wussten Sie schon, dass Eskimos Kühlschränke benutzen, um ihre Lebensmittel vor dem Gefrieren zu schützen?