Unfortunately this behavior makes it impossible to use multiple inheritance. So Ring.js uses a different system.
When a new class is created, Ring.js creates a completely new prototype by using the methods defined in its whole set of base classes. To solve problems created by the diamond inheritances Ring.js linearize the classes graph using the C3 algorithm as defined in the Python standard.
node.js is also supported.
Yes. When compared to similar libraries Ring.js has good performances.
When comparing classes libraries, it is necessary to explain the differences between them. Basically, if the syntax is nice and easy to type it will be slower. To make it faster you have to remove features and makes the syntax more and more ugly.
For Ring.js I tried to use a syntax as nice as possible while still keeping very good performances. This was quite
successful since, when compared to libraries providing similar features (mainly
this.$super that gives access to the
super method), Ring.js has excellent performances. It can be much faster than some well-known libraries, notably John
Resig's inheritance. Additionally, none of these other class systems provide multiple inheritance. See the test result:
Some class systems can still have better performances. None of these have
this.$super and require to use longer syntax
instead. But this type of performance difference should not be overestimated because it's only the measurement of pure
performances when calling a method. Real programs do a lot of other things rather that calling methods that performs
Anyway, I think it's better to favor shorter and nicer syntax to improve the productivity of the programmers rather
than trying to gain some milliseconds every x millions calls, that's why I chose to use
this.$super in Ring.js rather
than an uglier system.
Report bugs, propose improvements, improve the documentation. Any help will be welcomed!