Lightweight class model
JavaScript
var Base = {
create: function () {
var object = Object.create(this);
if (typeof object.constructor == 'function') {
object.constructor.apply(object, arguments);
}
return object;
},
extends: function (properties) {
var Child = Object.create(this);
for (var p in properties) {
Child[p] = properties[p];
}
return Child;
}
};
var Item = Base.extends({
constructor: function (content) {
this.content = content;
},
foo: function () {
return 42;
}
});
var ComplexItem = Item.extends({
constructor: function (content, size) {
Item.constructor.call(this, content);
this.size = size;
},
foo: function () {
return Item.foo.call(this) + 2;
}
});
var item = Item.create('yop');
var complexItem = ComplexItem.create('youp', 53);
console.log(item);
console.log(complexItem);
console.log(item.foo());
console.log(complexItem.foo());
console.log(ComplexItem.isPrototypeOf(item));
console.log(ComplexItem.isPrototypeOf(complexItem));