"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 ist window.
  • 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.

InformationsquelleAutor levi | 2012-03-04
Schreibe einen Kommentar