Hallo,
Aber das Problem ist, du kannst mit JS nicht wirklich OO programmieren.
Naja, ob Soshnikov das auch so sieht. Was soll denn "wirklich OO" sein. Javascript is about Objects. Functions are first class Objects. Das ist dann sprachlich schon verwirrend, wenn ich hier nicht von Objektorientiert sprechen möchte. Objektorientiert heißt meines Verständnisses auch, Objekte abzubilden, also Sinnzusammenhänge zu kapseln. Es heißt auch, dass vererbt werden kann. Ob ich nun "extend" schreibe oder "prototyp" ist doch egal.
Aber es fehlen die grundlegendsten Dinge, echte private Member,
Äh, die sind doch im Funktionsscope geclosed und für innere Funktionen aber weiter verfügbar. Was anderes als das ist das Prinzip von "private"?
auf die du z.b. auch in den prototype Funktionen zugreifen kannst
In PHP ist es doch so, dass private variablen nicht mit vererbt werden.
protected geht gar nicht mehr.
... stattdessen aber protected. Ich kann keine privaten Variablen in Unterfunktionen nutzen so dass sie dann auch vererbbar sind? Das was Crockford priveligierte Funktionen nennt?
Letztlich bleibt der einzige sinnvolle Weg, so wie es Mathias auch auf seinem Blog beschrieben hat. Private Eigenschaften kennzeichnen, dass sie privat sein sollen und eine einfache Vererbung über die prototype Eigenschaft und den Aufruf der superfunktione über call bzw. apply delegieren.
Naja, das ist ein Weg, um beim programmieren nicht selber durcheinander zu kommen, macht man in Linux ja auch, indem man ein "." voranstellt. "Vorsicht, nicht anpacken". Aber nach außen hin gibt es die Privatheit ja doch, würde ich nach wie vor meinen. Ich sehe diese Konvention mit dem "_" bei YUI aber auch.
if (typeof YUI != 'undefined') {
YUI._YUI = YUI;
}
Gruß
jobo