Wie man 'dieser' Wert von caller-Funktion?
Wenn ich eine Funktion wie diese:
function foo(_this) {
console.log(_this);
}
function bar() {}
bar.prototype.func = function() {
foo(this);
}
var test = new bar();
test.func();
dann die test
Instanz bar
wird protokolliert.
Jedoch, für diese Arbeit, die ich zu Durchlaufen haben, die this
im bar.prototype.func
Funktion. Ich Frage mich, ob es möglich ist, erhalten die gleichen this
Wert ohne vorbei this
.
Versuchte ich mit arguments.callee.caller
, aber dies gibt den Prototyp der Funktion selbst und nicht die this
- Wert in der Prototyp-Funktion.
Ist es möglich, sich die test
Instanz bar
nur aufrufen foo()
in der Prototyp-Funktion?
- Nein, Sie haben keinen Zugriff auf die Kontext-Funktionen oben auf dem Aufruf-stack. Sie übergeben diesem Kontext zusammen.
- Gibt es einen Grund, Sie nicht wollen, um pass
this
wenn Sie schon gehen, um eine Besondere Funktion für die Protokollierung attached to-bar-Prototyp? Gibt es einen anderen Grund, als für Lernzwecke zu verwenden, dieses Muster? - Es muss nicht unbedingt ein praktischer Zweck, aber es wäre sinnvoll in meinem Fall. Ich bin versucht, ein multi-level-for-Schleife nur durch die übergabe einer Funktion und Grenzen für eine Funktion, die ausgeführt wird, die Funktion, wie wäre es mit for-Schleifen. In einer regulären for-Schleife kann man auf
this
, aber so wie es scheint, muss ich weiterleitenthis
zu meiner Funktion. - ich denke, deine ursprüngliche Ansatz ist der richtige. Die beste Vorgehensweise ist, übergeben Sie die Instanz von dem Objekt zu der globalen Funktion.
- Ja, es kann einen praktischen nutzen haben. Manchmal Sie don ' T wählen Sie, wie JS eine Funktion aufrufen (Rückrufe, Einbauten, etc.).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die Frage ist: "ohne dies (mit allen Mitteln)' und dann die Antwort ist keine
Wert übergeben werden kann, durch alternative Methoden wenn. Zum Beispiel mit Globale var (in Bar Klasse) oder session oder cookies.
this
herum. Ich findefoo.apply(this)
viel sauberer / weniger hackish.Ich denke Aufruf
foo
im Rahmen derbar
funktionieren sollte:this
Wert. Was ich meine ist, dass ich sollte in der Lage sein zu erhaltenthis
innenfoo
, einfach mitgehenfoo()
innenfunc
.this
von der Instanztest
zur Verfügung foo, nachgewiesen durch die Protokollierung der testVal Eigenschaft, die es überlog
.this
vonfunc
innerhalbfoo
ohne tatsächlich vorbeithis
imfunc
.foo.call(this)
nicht passthis
(wie Sie sehen können,foo
hat keine Parameter, nichts ist vergangen), sondern setzt die Kontextfoo
zuthis
, wird die Instanz erstellt, indem derbar
KonstruktorWas ist das?
Oder so:
Können Sie dies tun, ohne änderung der externen Funktion, aber Sie müssen sich ändern, wie Sie es nennen.
Können Sie nicht den Kontext des Aufrufers, aber Sie können die
this
Eigenschaft für eine Funktion, die Sie aufrufen, mit der Methode bewerben oder rufen. Sehen diese Referenz für eine Erklärung derthis
.In der Regel, wenn
this
verwendet wird, ist es in einer Objekt-orientierten Kontext. Versuch zum aufrufen einer Methode von einem Objekt zu einem anderen könnte dies darauf hindeuten, schlechtes design. Erklären ein bisschen mehr, was Sie versuchen zu erreichen, für mehr anwendbare Entwurfsmuster.Ein Beispiel für eine javascript-OOP-Paradigma, überprüfen meine Antwort hier.