1.工厂模式
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; } var person1 = createPerson("Nicholas", 29, "Software Engineer"); var person2 = createPerson("Greg", 62, "Doctor");
2.构造函数模式
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { alert(this.name); }; } var person1 = new Person("Nicholas", 29, "Software Engineer"); var person2 = new Person("Greg", 62, "Doctor"); //与工厂模式的不同点 //1.没有显示创造对象 //2.直接将属性和方法赋值给this //3.没有return语句 //4.使用new创造对象 //使用方式 //1.当做构造函数使用 var person = new Person("Nicholas", 29, "Software"); person.sayName();//Nicholas //2.作为普通函数调用 Person("Yellow", 27, "Doctor"); window.sayName();//Doctor //3. 在另一个对象的作用域中调用 var o = new Object(); Person.call(o, "King", 25, "Nurse"); o.sayName();//King //缺点:每个方法都要在每个实例上重新创建一遍
3.原型模式
function Person() { } Person.prototype.name = "Yellowshorts"; Person.prototype.age = 29; Person.prototype.job = "Software"; Person.prototype.sayName = function () { alert(this.name); } var person1 = new Person(); person1.sayName();//Yellowshorts var person2 = new Person(); person2.sayName();//Yellowshorts alert(person1.sayName == person2.sayName);//true