Aber wo ist der Sinn, die Funktion prototypisch zu definieren, statt innerhalb der Klasse?
Wo ist der Sinn von prototypischer Vererbung überhaupt? Die Wiederverwendung von Objekten. Methoden müssen nur einmal angelegt werden. Beim funktionalen Erzeugen von Objekten, ob in einer normalen Funktion oder einer Funktion, die mit new aufgerufen wird, werden Methoden immer wieder neu erzeugt.
http://molily.de/weblog/closures-performance
http://jsperf.com/private-or-not-private/3
Private Objekte haben also ihre Kosten.
Warum überhaupt eine Klasse mit "new"?
Das ist noch einmal eine andere Frage, Leute wie Crockford plädieren ja für rein prototypische und funktionale Object Composition. Durchgesetzt hat sich das nicht und ich bin bei den größeren Systemen, an denen ich entwickle, sehr froh über pseudoklassische Vererbung (konkret Pseudoklassen mit CoffeeScript).
Natürlich kann man das auch ohne Konstruktoren lösen, die mit new aufgeruen werden, und Features wie super-Calls kann man auch besser mit Object Composition lösen:
http://uxebu.com/blog/2011/02/23/object-based-inheritance-for-ecmascript-5/
http://www.2ality.com/2011/06/prototypes-as-classes.html
https://github.com/kriszyp/compose
Allerdings sehe ich beim pseudoklassischen Konzept keine schwerwiegenden Nachteile, außer vielleicht dass die Versteifung auf große Klassenhierarchien und super-Calls stark eingeschränkt. Funktionale Programmierung und Object Composition sollte man also nicht über Bord werfen.
Mathias