//factory model: function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function () { alert(this.name); }; return o; } //constructor model: function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(this.name); }; } //prototype model function Person() { } Person.prototype.name = "roy"; Person.prototype.age = 29; Person.prototype.job = "software engineer"; Person.prototype.sayName = function () { alert(this.name); }; //mix constructor model and prototype model function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.friends = ["roy","angel"]; } Person.prototype = { constructor: Person, sayName: function () { alert(this.name); } } //dynamically prototype model function Person(name, age, job) { //properties this.name = name; this.age = age; this.job = job; //methods if (typeof this.sayName != "function") { Person.prototype.sayName = function () { alert(this.name); }; } } //parasitic constructor model function Person(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function () { alert(this.name); }; return o; } //durable object function Person(name, age, job) { //create return object var o = new Object(); //define private variable and method var xx; var yy; //add method o.sayName = function () { alert(name); }; //return object return o; }