Momentan lese ich das Buch “JavaScript: The Good Parts” von Douglas Crockford.
Ein durchweg empfehlenswertes Buch, das eine klare und kompakte Übersicht über die Stärken (und Schwächen) von JavaScript bietet. Sehr interessant ist das “Functional”-Pattern: Mit Hilfe von Closures können private Instanzvariablen und Methoden definiert werden. In 4 Schritten erstellt eine sogenannte “Maker”-Methode eine neue Objekt-Instanz.
Erzeuge ein neues Objekt
Definiere in der Methode die (privaten) Instanzvariablen und Methoden.
Hänge an das neue Objekt die öffentlichen Methoden. Dank dem “Closure”-Prinzip haben nur diese Methoden Zugriff auf die vorher definierten Instanzvariablen und Methoden.
Gebe das neue Objekt zurück.
Hier das Beispiel:
-
var vehicle = function(spec) {
-
// the spec object contains all attributes needed to create the object.
-
-
// create a new empty object using the object literal
-
var o = {};
-
-
// vars of this function are the private variables of the new object
-
var age = 0;
-
var maxSpeed = spec.maxSpeed;
-
var name = spec.name;
-
var price = spec.price;
-
-
// private methods
-
var calculateDegradation = function() {
-
return age * price / 10 ; // assuming linear degradation
-
};
-
-
// public methods
-
o.getName = function() {
-
return name;
-
};
-
-
o.getMaxSpeed = function() {
-
return maxSpeed;
-
};
-
-
o.setAge = function(v) {
-
age = v;
-
return o; // cascade pattern
-
}
-
-
o.getResidualValue = function() {
-
return price – calculateDegradation();
-
};
-
-
return o;
-
}
-
-
var myVehicle = vehicle( { name: ‘Audi R8’,
-
price: ‘106400’,
-
maxSpeed: ‘301’});
-
-
alert(myVehicle.getMaxSpeed()); // 301
-
alert(myVehicle.getResidualValue()); // 106400;
-
alert(myVehicle.setAge(2).getResidualValue()); // 85120;
Interessant ist die Ansicht im Firebug: Keine Spur von den privaten Methoden oder Instanzvariablen. Sie werden durch das “Closure” geschützt.