In Javascript ist es gleichwertig .gilt das nicht ändern, den Wert dieser?
Scheint einfach genug, ich will, nennen eine Funktion mit einem array von Argumenten. Sicher, ich kann sagen func.apply(this, ['some', 'arguments']);
aber das wird sich ändern den Wert von this
innen func
. Irgendeine Idee, wie dies zu tun, ohne es zu verändern?
- Gut, Sie können gehen
null
als erstes argument. Jedoch, was solltethis
finden Sie infunc
? - Die Frage ist nicht klar genug. Geben Sie bitte mehr code.
- Klingt wie Sie verwenden
this
innerhalb der Funktion in einer Weise, dass es nicht verwendet werden soll. - Geret'kal: +1
- Ok, ich bekomme es jetzt. In meinem Fall hatte ich eine Prototyp-Funktion, die ein Objekt, dass ich anrufen wollte mit
.apply()
. Ich habe angenommen, dass wäre die Funktion irgendwie gebunden werden, um Ihr Objekt, so dass ich nicht wollen zu ändern, wie es anzuwenden ist, aber anscheinend gibt es keine solche Verbindung undapply()
einfach befasst sich mit der Funktion, die aufgerufen ist.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht, , weil der Weg
this
funktioniert in JavaScript. Lesen Sie weiter:Gehen durch die "Die Eingabe Eines Ausführungskontexts" Abschnitt der ECMAScript-Spezifikation: wenn Sie eine Funktion aufrufen, wird der Wert von
this
ist bestimmt von dem, was es ist Links (als Aktivierung Objekt) . Wir erstellen eine Funktion namens steve, und legte ihn in ein Objekt:...wenn wir rufen Sie steve als
obj.method()
seinethis
istobj
, weilobj
war die Aktivierung Objekt.Der schwierige Fall ist, wenn nichts ist auf der linken Seite eine Funktion aufrufen:
Gibt es nichts auf der linken Seite der function-call — effektiv, es
null
— also der Wert vonthis
ist auf einen Standardwert festgelegt, der die Globale Objekt (window
im web-Browserglobal
im Node.js etc.).So sind Sie, in der Tat, die Einstellung einer Funktion
this
jedes mal, wenn Sie nennen es.P. S. Aufruf
steve.apply(null, [])
ist gleichbedeutend mit dem Aufrufsteve()
.steve.apply(undefined, [])
undsteve()
gleichwertig sind, obwohl Ihr Verhalten unterscheidet sich zwischen ES3 und ES5.this
setzen auf das Globale Objekt, undnull
/undefined
gleichwertig. Können Sie mir zeigen, wo das neue Verhalten beschrieben wird?this
es wird Zeit nennen.this
werden weiterhin alles, was Sie übergeben.bind()
.Beachten Sie, dass in ES6 kann man auch schreiben:
Hier
this
wirdWindow
innenfunc
, die von keinem nutzen ist. Aber wenn Sie schreiben:this
im innerenfunc
wirdobj
.Dies kann die Funktion, die ich suchte vor 5 Jahren, aber das war vor 5 Jahren, also wer sich noch erinnert 🙂
Den Wert
this
ist kein Geheimnis, wenn Sie eine Funktion aufrufen, je nachdem, wie es heißt, "normal" (ohnecall
oderapply
):So zu vermeiden, "ändern" der Wert von
this
übergeben Sie in den richtigen Wert zuapply
je nachdem, wie Sie es nennen würde, "normal":Wenn Sie eine Funktion aufrufen, allein, pass
null
.Wenn Sie eine Funktion aufrufen, die eine Methode eines Objekts, übergeben Sie das Objekt.
Um eine, wie diese funktioniert.
Was Sie wollen, macht nicht viel Sinn.
In der ecmascript-standard
this
ist auf diese Weise definiert:Den thisBinding Auflösung für eine Funktion Ausführungskontext angegeben ist so:
In anderen Worten: entweder geben Sie es, oder es wird automatisch das Globale Objekt. Es werden nie Erben, die diese Bindung von der Eltern-scope, so dass der einzige Weg, um die thisBindiong der übergeordneten Gültigkeitsbereich sind es die Kinder entweder durch
self = this