Klass is a project mainly written in JavaScript, it's free.
javascript library to improve javascript oo programming
require('sys'); require('./klass');
//1. create klass:
Klass.create('A.B', { initialize: function (word) { this.word = word; },
say: function () { console.log(this.word); } });
var c = A.B.$new('hello world'); c.say();
//2. klass method:
Klass.create('A.B', { $say: function () { console.log('hello world'); } });
A.B.$say();
//3. private method:
Klass.create('A.B', { $say: function () { console.log('klass '+ _say()); },
say: function () { console.log('instance ' + _say()); },
_say: function () { return 'hello world'; } });
A.B.$say(); var c = A.B.$new(); c.say();
//4. extend klass:
Klass.create('A.B', { initialize: function (word) { this.word = word; } });
A.B.$extend({ say: function () { console.log(this.word); } });
var c = A.B.$new('hello world'); c.say();
//5. subKlass:
Klass.create('A', { initialize: function (word) { this.word = word; } });
A.$subKlass('B', { say: function () { console.log(this.word); } });
var c = B.$new('hello world'); c.say();
//6. self usage:
Klass.create('A', { initialize: function (word) { self.word = word; self.sayAgain = function () { self.say(); }; },
say: function () { console.log(self.word); } });
var a = A.$new('hello world'); a.sayAgain();
//7. _super:
Klass.create('A', { _say: function () { return 'world'; } });
A.$subKlass('B', { _say: function () { return 'hello ' + _super(); } });
B.$subKlass('C', { say: function () { console.log(_say()); },
_say: function () { return 'say ' + _super(); } });
var c = C.$new(); c.say(); // say hello world
//8. klass attribute:
Klass.create('A', { $LIMIT: 100 });
console.log(A.$LIMIT); // 100
//9. mixin:
Klass.create('A', { $LIMIT: 100 });
Klass.create('B', { say: function () { console.log(_say()); },
_say: function () { return 'hello'; } });
Klass.create('C', { Mixins: [A, B],
_say: function () { return 'world'; } });
console.log(C.$LIMIT); // 100 var c = C.$new(); c.say(); // world
//10. abstract klass:
Klass.create('C', { Abstract: true, });
try { var c = C.$new(); } catch (e) { console.log('abstract klass cannot be instantiated'); }
//11. singleton:
Klass.create('C', { Singleton: true,
count: function () { this._count = this._count || 1; console.log(this._count); this._count++; } });
var c = C.$singleton(); c.count(); // 1 var cc = C.$singleton(); cc.count(); // 2