"dies" innerhalb einer anonymen Funktion?
Innen John Resig ' s Buch "Pro Javascript techniques" beschreibt er eine Möglichkeit zum generieren von dynamischen Objekt-Methoden mit den folgenden code:
//Create a new user object that accepts an object of properties
function User(properties) {
//Iterate through the properties of the object, and make sure
//that it's properly scoped (as discussed previously)
for (var i in properties) {
(function() {
//Create a new getter for the property
this["get" + i] = function() {
return properties[i];
};
//Create a new setter for the property
this["set" + i] = function(val) {
properties[i] = val;
};
})();
}
}
Das problem ist wenn ich versuche die Instanziierung der oben genannten Objekt, das dynamische Methoden wird an das window-Objekt anstelle des Objekts instanziiert. Es scheint, wie "diese" bezieht sich auf das Fenster.
//Create a new user object instance and pass in an object of
//properties to seed it with
var user = new User({
name: "Bob",
age: 44
});
alert( user.getname() );
Läuft der obige code löst diese Fehlermeldung "Benutzer.getname ist keine Funktion".
Was ist die richtige Art der Generierung der dynamischen Funktionen für jedes Objekt instanziiert?
- Ich bin mir sicher, dass John Resig verwendet richtiges Einrücken.
- Dies scheint nicht richtig. In der anonymen Funktion,
this
istwindow
. - Die Antwort ist nicht Einzug, aber es wird Einzug. Diskutieren.
- Es scheint, dass dort ein Fehler in dem Buch arrixlive.wordpress.com/2007/01/09/...
- Es ist ein Fehler in dem Buch. Überprüfen Sie die errata hier. apress.com/9781590597279
- Eigentlich hat er nicht 😛 books.google.com/...
- Wie Sie sehen, nicht die Einrückung gibt es?
- Denn ich bin running out of Koffein.
- Mit
i
für Schlüssel-Namen in nicht-numerischen Eigenschaft enumeration nur irgendwie nervt mich das.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist dieser code aus dem Buch? Ich habe das Buch, aber das habe ich noch nicht gelesen.Es ist ein Fehler in dem Buch. Überprüfen Sie die errata: http://www.apress.com/9781590597279
In der anonymen Funktion,
this
ist die Globalewindow
.Könnte man es Arbeit durch das hinzufügen von
.call(this, i)
nach.i
.;O
val
parameter übergeben, um den anon-Funktion? Es sieht nicht wie es eingesetzt wird...Den
this
im inneren self-executing-Funktion ist nicht das gleiche wie die dieser in der äußerenUser
Funktion. Als Sie bemerkt, es bezieht sich auf die Globalewindow
.Das problem ist behoben, wenn Sie leicht ändern Sie den code, indem eine variable und bezieht sich auf die äußere
this
.Sagte, ich bin nicht sicher, warum der anonyme selbst ausgeführte Funktion wird auch hier gebraucht, so haben Sie die einfachere option nur verlassen Sie es vollständig, so wie hier:
Hier ist, wie es zu tun. Speichern Sie die Rahmen in einer anderen Variablen. Die andere Möglichkeit ist, dies nicht zu tun, die innere Funktion, die Sie tun, in der for-Schleife.
Option 2:
i
was ändert, wenn die Schleife ausgeführt wird und die Blätteri
als die Letzte Eigenschaft name. Teil von John ' s Beispiel war, wie dieses problem zu vermeiden. Option 1 können leicht behoben werden, jedoch durch die übergabei
als parameter. Fix Option 2 würden Sie es in eine Feste version der Variante 1.Können Sie immer mit Gewalt anderen
this
für jede Funktion nennen, mit derapply
Methode.