Another possible inheritance pattern
by julienrf
JavaScript
var Base = {
constructor: function () {},
extend: function (properties) {
var that = Object.create(this);
for (var p in properties) {
that[p] = properties[p];
}
return that;
},
create: function() {
var that = {};
this.constructor.apply(null, Array.prototype.concat.apply([that], arguments));
return that;
}
};
var Task = Base.extend({
constructor: function (that, spec) {
that.name = spec.name;
that.done = false;
},
toggle: function (that) {
that.done = !that.done;
}
});
var ComplexTask = Task.extend({
constructor: function (that, spec) {
Task.constructor(that, spec);
that.content = spec.content;
}
});
var task = Task.create({name: 'foo'});
Task.toggle(task);
console.log(task);
var complexTask = ComplexTask.create({ name: 'bar', content: 'baz' });
ComplexTask.toggle(complexTask);
console.log(complexTask);