Ich lese "Pro Javascript Techniques" von John Resig und bin mit einem Beispiel verwirrt. Dies ist der Code:
// Erstellt ein neues Benutzerobjekt, das ein Objekt von Eigenschaften akzeptiert
function User( properties ) {
// Iteriere über die Eigenschaften des Objekts und überprüfe,
// dass es ordnungsgemäß abgeschirmt ist (wie zuvor besprochen)
for ( var i in properties ) { (function(){
// Erstellt ein neues Getter für die Eigenschaft
this[ "get" + i ] = function() {
return properties[i];
};
// Erstellt ein neues Setter für die Eigenschaft
this[ "set" + i ] = function(val) {
properties[i] = val;
};
})(); }
}
// Erstellt eine neue Benutzerobjektinstanz und gibt ein Objekt von
// Eigenschaften mit, um es zu initialisieren
var user = new User({
name: "Bob",
age: 44
});
// Beachte nur, dass die Eigenschaft 'name' nicht existiert, da sie privat ist
// innerhalb des Eigenschaftenobjekts
alert( user.name == null );
// Jedoch können wir auf ihren Wert über die neue getname()
// Methode zugreifen, die dynamisch generiert wurde
alert( user.getname() == "Bob" );
// Schließlich können wir sehen, dass es möglich ist, das Alter zu setzen und abzurufen
// mithilfe der neu generierten Funktionen
user.setage( 22 );
alert( user.getage() == 22 );
Jetzt wirft das Ausführen davon auf der Firebug-Konsole (auf FF3) einen Fehler, dass user.getname() keine Funktion ist. Ich habe versucht, das zu machen:
var other = User
other()
window.getname() --> das funktioniert!
Und es hat funktioniert!
Irgendwelche Ideen warum? Vielen Dank an alle!
PS: Ich empfehle dieses Buch nachdrücklich.
EDIT:
das hier ausführen:
var me = this;
scheint etwas besser zu funktionieren, aber beim Ausführen von "getname()" gibt es '44' zurück (die zweite Eigenschaft)...
außerdem finde ich es seltsam, dass es auf dem window-Objekt ohne Änderung funktioniert hat...
und eine dritte Frage, was ist der Unterschied zwischen PEZ Lösung und dem Original? (er verwendet keine anonyme Funktion)
Danke an alle für das Feedback! +1