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 weiterleiten this 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.).
InformationsquelleAutor pimvdb | 2011-06-13
Schreibe einen Kommentar