Hallo,
Die Kapselung erfolgt nicht so, dass sie für einen OO Ansatz wirklich verwendbar ist.
Das geht nicht:
function MyClass(){
var private;
}MyClass.prototype.myFunction = function() {
alert(private);
};
Aber das geht:
~~~javascript
function MyClass(){
var private;
}
MyClass.prototype.myFunction = function() {
alert(this.private);
};
Es ist doch klar, dass bei
function() { alert(private); }
die JS-Engine nicht wissen kann, was denn nun "private" überhaupt sein soll.
Man muss schon dazusagen, dass eine Eigenschaft des Objekts gemeint ist und nicht etwa eine globale Variable oder sonstwas.
Ich persönlich empfinde es überigens als Glück, dass ich meine ersten OOP-Schritte mit javascript gemacht habe und nicht einer klassischen OOP-Sprache. Inzwischen programmiere ich in C# und habe so meine kleinen Schwierigkeiten damit. Auf die Frage, wie denn nun mit der Sprache klarkomme, fiel meine Antwort entsprechend aus: "Ganz gut, aber manchmal ist sie mir zu sharp", was v.a. auf die Typsicherheit abzielte und auch auf die strengen Klassen, die man nicht einfach mal erweitern kann.
Als Javascriptler kommt mir die extreme Typsicherheit manchmal schlicht pedantisch vor. Die ständigen Meldungen wie "es existiert keine implizierte Umwandlung von int in string" gehen mir ziemlich auf den Wecker ;) musste in einer Anwendung als Workaround sogar schon auf ((√x)²)/y zurückgreifen, nur weil ich x/y eine Dezimalzahl brauchte *kopfpatsch*.
Gruß, Don P