function Employee(name) { this.name = name; this.say = function() { log.add("I am employee " + name); } } function EmployeeFactory() { this.create = function(name) { return new Employee(); } } function Vendor(name) { this.name = name; this.say = function() { log.add("I am vendor " + name); } } function VendorFactory() { this.create = function(name) { return new Vendor(name); } } var log = (function() { var log = ""; return { add: function(msg) { log += msg + " "}, show: function() { console.log(log); log = ""; } }; }()); function run() { var persons = []; var employeeFactory = new EmployeeFacotry(); var vendorFactory = new VendorFactory(); persons.push(employeeFactory.create("manx")); persons.push(employeeFactory.create("bob")); persons.push(vendorFactory.create("jack")); persons.push(vendorFactory.create("smith")); for (obj of persons) { obj.say(); } log.show(); } run();