Да а еще можно статические свойства добавлять) например так
function Class(g,h){var d=h||g,a=h?g:null,e=Class.overname||"super",f=function(){if(this.__construct__)return this.__construct__.apply(this,arguments)},i=function(){};i.prototype=a?a.prototype:Class.prototype;d.prototype=new i;f.prototype=new d(f,d.prototype);var c=f.prototype,b;for(b in c)c.hasOwnProperty(b)&&c[b]instanceof Function&&(a=d.prototype[b])&&function(b,d,a){c[a]=function(){var a=this[e];this[e]=d;var c=b.apply(this,arguments);a?this[e]=a:delete this[e];return c}}(c[b],a,b);return f};
var Cat = new Class( function ( static ) {
// static ссылается на то, что возвращает функция Class (на то что потом кладется в Cat)
static.count = 0; // статическое свойство count
this.__construct__ = function () {
static.count++
};
} );
// теперь в Cat лежит класс котов, и через этот класс можно получить доступ к статическим свйоствам ни создав ни одного кота
alert( Cat.count ) //0
new Cat;
new Cat;
new Cat;
alert( Cat.count ) //3