Yet another simple Class pattern
by julienrf
JavaScript
function Any() {}
Any.extend = function (spec) {
var result = function() { result.constructor.apply(this, arguments); }
result.prototype = Object.create(this.prototype);
result.extend = this.extend;
result.super = this.prototype;
if (spec.constructor !== Object) {
result.constructor = spec.constructor;
delete spec.constructor;
}
for (var p in spec) {
result.prototype[p] = spec[p];
}
return result;
};
var Sub = Any.extend({
foo: function () {
return this.bar();
},
bar: function () {
return 40;
}
});
var SubSub = Sub.extend({
constructor: function (spec) {
this.val = spec.val;
},
bar: function () {
return this.val + SubSub.super.bar.call(this);
}
});
var SubSubSub = SubSub.extend({
flop: function () { return 'foo'; }
});
var o3 = new Sub();
var o4 = new SubSub({ val: 2 });
var o5 = new SubSubSub({ val: 2 });
console.log(o3);
console.log(o4);
console.log(o5);
console.log(o3.foo());
console.log(o4.foo());
console.log(o5.foo());
console.log(o3 instanceof SubSub);
console.log(o4 instanceof SubSub);
console.log(o5 instanceof SubSub);