In John Resigs Buch "Pro Javascript techniques" beschreibt er eine Möglichkeit, dynamische Objektmethoden mit folgendem Code zu erzeugen:
%Vor%Das Problem ist, wenn ich versuche, das obige Objekt zu instanziieren, werden die dynamischen Methoden an das Fensterobjekt anstelle des instanziierten Objekts angefügt. Es scheint, als ob "dies" sich auf das Fenster bezieht.
%Vor%Wenn Sie den obigen Code ausführen, wird der Fehler "user.getname ist keine Funktion" ausgegeben.
Wie werden die dynamischen Funktionen für jedes instanziierte Objekt korrekt generiert?
Ist dieser Code aus dem Buch? Ich habe das Buch, aber ich habe es nicht gelesen.
Es ist ein Fehler im Buch. Überprüfen Sie die Errata: Ссылка
In der anonymen Funktion ist this
das globale window
.
Sie könnten es schaffen, indem Sie .call(this, i)
nach dem hinzufügen.
Das this
in der inneren selbstausführenden Funktion ist nicht dasselbe wie das in der äußeren User
-Funktion. Wie Sie bemerkt haben, bezieht es sich auf das globale window
.
Das Problem ist behoben, wenn Sie den Code geringfügig ändern, indem Sie eine Variable hinzufügen, die auf das äußere this
verweist.
Das heißt, ich bin mir nicht sicher, warum die anonyme selbstausführende Funktion hier überhaupt benötigt wird, also haben Sie die einfachere Option, sie einfach ganz auszulassen, so:
%Vor%Hier ist, wie es geht. Sie müssen den Kontext in einer anderen Variablen speichern. Die andere Option besteht nicht darin, diese innere Funktion auszuführen, die Sie in der for-Schleife ausführen.
%Vor%Option 2:
%Vor%Tags und Links javascript anonymous-function