Wer mir hier auf Anhieb sagen kann was hier was zu bedeuten hat, verdient meinen Respekt. Aber der kann mir sicherlich auch erklären warum die Argumentreihenfolge gerade Konstruktor, Elternkonstruktor und dann Members ist.
Naja, ohne Lesen der Doku gehts nicht. Auch nicht bei PHPs Zend-Framework (komplett OOP). Irgendwie scheinen sich die Erklärungen dazu und Argumente alle auch hier zu finden: http://www.yuiblog.com/blog/2010/01/06/inheritance-patterns-in-yui-3/.
Dort wird nur erklärt wie es YUI macht und keiner sagt dass es YUI schlecht macht. Im gegenteil dadurch dass es wenig macht, ist es schnell.
Aber das Problem ist, du kannst mit JS nicht wirklich OO programmieren. Du kannst versuchen einige Muster umzusetzen und du musst hoffen, dass du nichts durcheinander bringst, wenn du mit einem Framework arbeitest das versucht diesen Mangel etwas zu lindern. Aber es fehlen die grundlegendsten Dinge, echte private Member, auf die du z.b. auch in den prototype Funktionen zugreifen kannst und protected geht gar nicht mehr.
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.
Bei dem ganzen "gemecker" - das kann aber auch Vorteile bieten.
Die Dynamik der sprache eröffnet prinzipiell auch Möglichkeiten. Dass du z.b. jederzeit, allen bestehenden Instanzen einer Klasse, neue Funktionalität zuweisen kannst, ist in anderen Sprachen deutlich umständlicher.
Auch das ändern von Klassenfunktionen zur Laufzeit kann Vorteile haben.
Und überhaupt für alle Eigenschaften die geändert werden dürfen, Millionen von getter und setter zu schreiben ist mühsam.
Man muss einfach mit dem Arbeiten, was die Sprache kann. Das jemand der u.U. aus der Java Ecke kommt, sich so etwas wie hier vorgestellt wurde, zusammenbaut ist daher nicht verwunderlich. Aber ob es sinnvoll ist bleibt dahin gestellt und muss jeder selber entscheiden ob er die Performanceverluste verkraften kann.
YUI bietet ein pseudoklassisches Inheritance-Pattern mit Y.extend(ChildClass, ParentClass). Einfacher gehts doch nicht, oder?
Eben, mehr gibt es auch nicht.
Struppi.