雖然Object構造函數或者對象字面量均可以建立單個對象,可是這些方式有個明顯的缺點:使用同一個接口建立不少對象,會產生大量的重複代碼,爲了解決這個問題,如今不少人建立了不少不一樣的模式來解決這個問題設計模式
1>工廠模式:工廠模式是軟件工程領域一種廣爲人知的設計模式,這種模式抽象建立具體對象的過程函數
function CreatPerson(name,age,job) { var o=new Object(); o.name=name; o.age=age; o.job=job; o.sayName=function () { console.log(this.name); }; return o; } var person1=new CreatPerson('kobe',39,'player'); person1.sayName();
2>構造函數模式:經歷4個步驟1>建立一個新對象2>將構造函數的做用域賦給新對象(所以this就指向這個新對象)3>執行構造函數中的代碼(爲這個新對象添加屬性)4>返回新對象this
構造函數就是你用new建立對象時調用的函數。使用構造函數的好處在於全部用同一個構造函數建立的對象都具備一樣的屬性和方法。spa
function Person(name) { this.name=name; this.sayName=function () { console.log(this.name); } } var person1=new Person('kobe'); var person2=new Person('james'); console.log(person1.name); console.log(person2.name); person1.sayName(); person2.sayName();
console.log(person1 instanceof Person);
console.log(person2 instanceof Person);
3>原型對象:將信息直接添加在原型對象上,咱們建立的每一個函數都有一個prototype屬性,這個屬性是一個指針,指向一個對象,而這個對象的用途的就是能夠讓全部實例對象共享它所包含的屬性和方法
prototype
缺點:使用原型,全部實例對象都有共同的屬性和方法,全部會形成很差的影響,設計
1 Person.prototype= { 2 name:'kobe', 3 age:39, 4 sayName:function () { 5 console.log(this.name+'---'+this.age); 6 } 7 } 8 9 var person1=new Person(); 10 person1.sayName();