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);