Ich habe einen JavaScript-Namespace sagen
%Vor%Wenn ich jetzt einen solchen Code ausführe, gibt es TypeError: this.C ist keine Funktion. Kann mir jemand sagen, warum es so ist? Ich weiß, dass es etwas mit lexikalischem Scoping zu tun hat, aber ich kann das nicht verstehen.
Ich denke, das Problem ist, dass, wenn this.C()
innerhalb der Funktion von B
ausgeführt wird, this
sich auf das Objekt bezieht, das B
enthält, also das Objekt A
. (Dies setzt voraus, dass B()
im Kontext von A
aufgerufen wird)
Das Problem ist, C
existiert nicht für das Objekt A
, da es in B
definiert ist. Wenn Sie eine lokale Funktion C()
in B
aufrufen wollen, verwenden Sie einfach C()
.
BEARBEITEN:
Außerdem bin ich mir nicht sicher, was du gepostet hast, ist gültiges JavaScript. Insbesondere sollte B
auf diese Weise definiert werden, da Sie die object: property-Syntax nicht innerhalb einer Funktion verwenden können.
Ich habe einen JavaScript-Namespace sagen
%Vor%Wenn ich jetzt einen solchen Code ausführe, gibt es TypeError: this.C ist keine Funktion. Kann mir jemand sagen, warum es so ist? Ich weiß, dass es etwas mit lexikalischem Scoping zu tun hat, aber ich kann das nicht verstehen.
Sie müssen vorsichtig sein, wenn Sie this verwenden, um etwas in Javascript zu identifizieren, da sich bei jeder Änderung des Bereichs "this" ändert.
Das Zuweisen des 'this' Verweises zu seiner eigenen Variable hilft, dies zu umgehen.
%Vor%Lösung zum Aufrufen von Methoden von einer anderen Methode. (Im Wesentlichen muss der Zeiger "this" einer Variablen zugewiesen werden und die neue Variable stattdessen verwendet werden.)
%Vor%Dieses Beispiel zeigt, wie man eine Methode innerhalb einer anderen Methode oder von außen über eine Instanz der Funktion aufrufen kann.
Ich bin wirklich überrascht, dass Ihr Code Ihnen in der Zeile "C:" keinen Fehler gibt.
Wie auch immer, Ihre Syntax zum Definieren einer Funktion ist nicht korrekt. Definieren Sie es mit dem Schlüsselwort var. Beachten Sie auch, dass ich die 'Schließung' erstellt habe, damit die Funktion C auf 'diese' zugreifen kann. Siehe den folgenden Code:
%Vor%Wenn Sie C diesem 'Objekt' zuweisen möchten, können Sie auch Folgendes tun:
%Vor%Ich denke, das Problem ist, dass, wenn %code% innerhalb der Funktion von %code% ausgeführt wird, %code% sich auf das Objekt bezieht, das %code% enthält, also das Objekt %code% . (Dies setzt voraus, dass %code% im Kontext von %code% aufgerufen wird)
Das Problem ist, %code% existiert nicht für das Objekt %code% , da es in %code% definiert ist. Wenn Sie eine lokale Funktion %code% in %code% aufrufen wollen, verwenden Sie einfach %code% .
BEARBEITEN: Außerdem bin ich mir nicht sicher, was du gepostet hast, ist gültiges JavaScript. Insbesondere sollte %code% auf diese Weise definiert werden, da Sie die object: property-Syntax nicht innerhalb einer Funktion verwenden können.
%Vor%Lösung zum Aufrufen von Methoden von einer anderen Methode. (Im Wesentlichen muss der Zeiger "this" einer Variablen zugewiesen werden und die neue Variable stattdessen verwendet werden.)
%Vor%Dieses Beispiel zeigt, wie man eine Methode innerhalb einer anderen Methode oder von außen über eine Instanz der Funktion aufrufen kann.
Tags und Links javascript methods