Wenn Sie eine Funktion in Javascript aufrufen, ‚dies‘, um verschiedene Dinge beziehen, abhängig vom Kontext:
Wenn die Funktion gebunden ist, wird die ‚this‘ auf das, was gesetzt werden, war gebunden, z fn.bind(x)()
Wenn Sie aufgerufen, um die Funktion fn.call(x)
oder fn.apply(x)
, die dies auf x verwenden werden.
Wenn die Funktion definiert wurde Pfeil-Notation, dann ist die this
wird, was auch immer wurde definiert this
zu sein, wenn die Funktion definiert ist.
Wenn Sie die Funktion mit thing.fn()
nennen, ist das this
was vor dem ist ‚‘, in diesem Fall ‚Ding‘.
Wenn Sie in einem Konstruktor sind, genannt mit new
dann bezieht sich this
auf das neue Objekt im Bau.
Wenn Sie nur einen bloßen Aufruf der Funktion, das ist nicht auf ein beliebiges Objekt, , die nicht gebunden ist, ist, dass nicht ein Pfeil Funktion und Sie sind es in der einfachen Art und Weise aufrufen, ohne Rufen Sie an oder wenden Sie sich an, dann verweist this
auf das globale Objekt, wenn Sie nicht im strikten Modus sind und nicht definiert, wenn Sie sich im strikten Modus befinden. Dies wird als "dieser Zwang" durch das Zitat bezeichnet.
Das ist, warum, wenn Sie eine Browser-Konsole öffnen und
Function('console.log(this)')()
die Konsole ausgibt das Fenster, das das globale Objekt im Browser ist der Typ. Allerdings, wenn Sie die Konsole öffnen und
Function('"use strict";console.log(this)')()
die Konsole geben log undefined
.
Ich benutze den Function-Konstruktor hier, weil es eine Möglichkeit ist, die Verwendung des nicht-strikten Modus unabhängig von der Situation zu erzwingen - also sollten diese Beispiele immer noch funktionieren, auch wenn Sie sie aus einer Datei heraus ausführen oder Konsole, die im strikten Modus arbeitet.
this
Zwang kann das der bequemste Weg, um das globale Ziel des Erhaltens, das heißt
const global = Function('return this')()
funktioniert mit jedem Browser und Knoten, auch im strikten Modus.
Aber die meiste Zeit, möchten Sie schnell scheitern, und Funktionen, die Sie auf bestimmte Arten von Instanzen tatsächlich operieren auf Ihrem globalen Objekt arbeiten können Dinge schlecht durcheinander bringen. Versuche, etwas zu schreiben oder etwas von this
zu lesen, wenn Ausnahmen nicht definiert sind, sind fast immer besser als das Lesen und Schreiben des globalen Objekts.
Was wissen Sie bereits über Javascript 'this'? (Wäre eine Erklärung mit den Grundlagen dessen zu beginnen, wofür "das" in einem allgemeinen Sinne gebraucht wird, oder ...?) – nnnnnn
Der von Ihnen zitierte Text scheint zu erklären, was "dieser Zwang" (in diesem Zusammenhang) bedeutet. Was genau verstehst du nicht? Die Beschreibung ist nicht sehr präzise: * "Im strikten Modus führt das Verweisen auf einen Wert von null oder nicht definiert zu einem Fehler." * Das stimmt natürlich nicht. Der Zugriff auf 'this' selbst wird keinen Fehler verursachen. 'this.etwas 'würde. –
Dieser [link] (http://stackoverflow.com/a/11496488/452708) könnte einige Einblicke werfen. – Abhijeet