Java Reference
In-Depth Information
Wir haben in dem Beispiel wieder eine selbst deinierte Objektdeklaration. In dieser wird
mit var name = new Object(); ein einfaches Objekt angelegt und in einer lokalen Variable
gespeichert. Diese ist damit von außen nicht zugänglich. Sie ist im Sinn der Datenkapselung
versteckt. Auch die folgenden lokalen Variablen sind von außen nicht zugänglich.
Da name ein Objekt repräsentiert bzw. auf ein Objekt verweist, können wir dieses ein-
fach  durch Hinzufügen einer neuen Eigenschat erweitern. Mit der Zeile name.getURL =
function() { return urlInternerName; }; fügen Sie dem Objekt eine Eigenschat
getURL hinzu. Dies dient als Funktionsreferenz auf eine anonyme Funktion, die über das
Objekt als Methode aufgerufen werden kann. Der Rückgabewert des Getters ist der Wert in
der lokalen Variable urlInternerName .
Nach der gleichen Logik bauen wir mit name.setURL = function(name) { urlInternerName
= name; }; auch den Setter auf. Entsprechend der üblichen Programmierung eines Setters
nimmt die Funktion den als Übergabewert an die Funktion übergebenen Wert und setzt damit
den Wert einer internen Variablen. Das ist der Wert der lokalen Variable urlInternerName .
Zuletzt fügen wir mit name.irma = irmaInternerName; eine weitere Eigenschat irma dem
Objekt name hinzu. Diese freigegebene Eigenschat irma gestattet den indirekten Zugrif auf
eine lokale Variable. In der Praxis wählt man den Namen der Eigenschat und der lokalen
Variable meist gleich. Hier weichen wir davon ab, um deutlicher zu machen, was die lokale
Variable und was die Eigenschat ist.
PrAXISTIPP: Sie können (und sollten) wie oben erwähnt an dieser Stelle auch
mit Closures (inneren Funktionen) arbeiten. Dann werden die Getter und Setter
(oder auch andere Funktionen) einfach in der als Konstruktor gedachten Funk-
tion als innere Funktionen notiert und der jeweils nach außen gegebenen Eigen-
schat wird eine Funktionsreferenz darauf zugewiesen.
Der Konstruktor wird mit return name; das Objekt zurückgeben. Das ist der entscheidende
Trick in dem Beispiel, denn das über new RJS() erstellte Objekt verfügt damit auch über die
neu hinzugefügten Eigenschaten/Methoden. Die nachfolgenden Zugrife und Ausgaben
zeigen, dass man über diese freigegebenen Eigenschaten/Methoden an die gewünschten
Werte kommt, während die direkten Zugrife wie gewünscht nur undeined liefern.
Bild 13.10■ Datenkapselung in JavaScript
Nun besteht in JavaScript jedoch das Problem, dass die Konstruktormethode jederzeit als
normale Funktion aufgerufen werden kann (ohne den Einsatz von new ). Das kann gar nicht
verhindert werden. Aber unsere Konstruktion funktioniert auch dann (kap13_10_1.js):
Search WWH ::




Custom Search