2013-12-30 11:04:59 +01:00
|
|
|
var API3 = function(m)
|
|
|
|
{
|
2013-03-05 23:52:48 +01:00
|
|
|
/**
|
|
|
|
* Provides a nicer syntax for defining classes,
|
|
|
|
* with support for OO-style inheritance.
|
|
|
|
*/
|
2013-12-30 11:04:59 +01:00
|
|
|
m.Class = function(data)
|
2013-03-05 23:52:48 +01:00
|
|
|
{
|
|
|
|
var ctor;
|
|
|
|
if (data._init)
|
|
|
|
ctor = data._init;
|
|
|
|
else
|
|
|
|
ctor = function() { };
|
|
|
|
|
|
|
|
if (data._super)
|
|
|
|
{
|
|
|
|
ctor.prototype = { "__proto__": data._super.prototype };
|
|
|
|
}
|
|
|
|
|
|
|
|
for (var key in data)
|
|
|
|
{
|
|
|
|
ctor.prototype[key] = data[key];
|
|
|
|
}
|
|
|
|
|
|
|
|
return ctor;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Test inheritance:
|
|
|
|
var A = Class({foo:1, bar:10});
|
|
|
|
print((new A).foo+" "+(new A).bar+"\n");
|
|
|
|
var B = Class({foo:2, bar:20});
|
|
|
|
print((new A).foo+" "+(new A).bar+"\n");
|
|
|
|
print((new B).foo+" "+(new B).bar+"\n");
|
|
|
|
var C = Class({_super:A, foo:3});
|
|
|
|
print((new A).foo+" "+(new A).bar+"\n");
|
|
|
|
print((new B).foo+" "+(new B).bar+"\n");
|
|
|
|
print((new C).foo+" "+(new C).bar+"\n");
|
|
|
|
//*/
|
2013-12-30 11:04:59 +01:00
|
|
|
|
|
|
|
return m;
|
|
|
|
|
|
|
|
}(API3);
|