JavaScript Factory

by Dan Wahlin

JavaScript

var person = function() {
   if (person.caller != personFactory.create) {
       throw new Error("There is no public constructor for person.");
   }
};

person.base = {
    firstName: '',
    lastName: '',
    type: 'Customer',
    getFullName: function() {
        return this.firstName + ' ' + this.lastName;
    }    
};

var personFactory = {
    create: function(type, firstName, lastName) { 
        var per = Object.create(person.base);
        per.firstName = firstName;
        per.lastName = lastName;
        
        if (type === 'Manager') {
            var mgr = Object.create(per);
            mgr.type = 'Manager';
            mgr.employees = 50;
            return mgr;
        }
        return per;
    }
};


var p = personFactory.create('Customer', 'John', 'Doe');
alert(p.type);
alert(p.getFullName());
    
//This will fail
var p2 = new person();
alert(p2);