JavaScript Multiple Inheritance

by david_i_smith

JavaScript

function FormFactory (options) { this.options = options; }
function AssessmentFormFactory (options) { FormFactory.call(this, options); }
function ReportFormFactory (options) { FormFactory.call(this, options); }
function DemographicsFormFactory (options) { AssessmentFormFactory.call(this, options); }
function UneditableFormFactory (options) { AssessmentFormFactory.call(this, options); }

AssessmentFormFactory.prototype = Object.create(FormFactory.prototype);
AssessmentFormFactory.prototype.constructor = AssessmentFormFactory;

ReportFormFactory.prototype = Object.create(FormFactory.prototype);
ReportFormFactory.prototype.constructor = ReportFormFactory;

DemographicsFormFactory.prototype = Object.create(AssessmentFormFactory.prototype);
DemographicsFormFactory.prototype.constructor = DemographicsFormFactory;

UneditableFormFactory.prototype = Object.create(FormFactory.prototype);
UneditableFormFactory.prototype.constructor = UneditableFormFactory;

FormFactory.prototype.sayHello = function () {
    alert(this.options.name);
};

AssessmentFormFactory.prototype.loadData = function () {
    alert('I want report types and report params');
};

ReportFormFactory.prototype.loadData = function () {
    alert('I want report params');
};

DemographicsFormFactory.prototype.loadData = function () {
    alert('I want report types, report params and demographics');
};

UneditableFormFactory.prototype.loadData = function () {
    alert('I want report types');
};

var assessmentFormFactory = new AssessmentFormFactory({name: 'Assessment'});
assessmentFormFactory.sayHello();
assessmentFormFactory.loadData();

var reportFormFactory = new ReportFormFactory({name: 'Report'});
reportFormFactory.sayHello();
reportFormFactory.loadData();

var demographicsFormFactory = new DemographicsFormFactory({name: 'Demographics'});
demographicsFormFactory.sayHello();
demographicsFormFactory.loadData();

var uneditableFormFactory = new UneditableFormFactory({name:...