JavaScript Factory Pattern

From http://addyosmani.com/resources/essentialjsdesignpatterns/book/#factorypatternjavascript

by david_i_smith

JavaScript

function SummaryReport (options) {
    this.orgId = options.orgId || 1;
    this.orgType = options.orgType || 1;
    this.academicYear = options.academicYear || 2015;
}

function RosterReport (options) {
    this.orgId = options.orgId || 1;
    this.orgType = options.orgType || 1;
    this.academicYear = options.academicYear || 2015;
    this.sex = options.sex || 'Male';
    this.race = options.race || 'White';
}

function ReportFactory () {}

ReportFactory.prototype.reportType = SummaryReport;

ReportFactory.prototype.createReport = function (options) {
    switch (options.reportType) {
        case "summary":
            this.reportType = SummaryReport;
            break;
        case "roster":
            this.reportType = RosterReport;
            break;
    }
    return new this.reportType(options);
};

var reportFactory = new ReportFactory();
var summaryReport = reportFactory.createReport({
    reportType: 'summary',
    orgId: 123456,
    orgType: 654321
});

console.log(summaryReport instanceof SummaryReport);
console.log(summaryReport);

var rosterReport = new reportFactory.createReport({
    reportType: 'roster',
    orgId: 123456,
    orgType: 654321,
    sex: 'Female'
});

console.log(rosterReport instanceof RosterReport);
console.log(rosterReport);