Js面向物件程式設計——組合使用建構函式模式和原型模式
阿新 • • 發佈:2019-01-10
Js面向物件程式設計——組合使用建構函式模式和原型模式
Js面向物件程式設計——組合使用建構函式模式和原型模式
- 建立自定義型別的最常見方式,就是組合使用建構函式模式與原型模式。建構函式模式用於定義例項屬性,而原型模式用於定義方法和共享的屬性。結果,每個例項都會有自己的一份例項屬性的副本,但同時又共享著對方法的引用,最大限度地節省了記憶體。另外,這中混成模式還支援向建構函式傳遞引數;可謂是即倆種模式之長。下面的程式碼重寫了前面的例子。
function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.friends=["Shelby","Count"]; } Person.prototype={ constructor:Person, sayName:function(){ alert(this.name); } } var person1=new Person("Nicholas",29,"Soft"); var person2=new Person("Greg",27,"Doctor"); person1.friends.push("Van"); alert(person1.friends);// "shelby",Count,Van" alert(person2,friends);// "Shelby",Connt" alert(person1.friends===person2.friends);//false alert(person1.sayName===person2.sayName);// true
-
在這個例子中,例項屬性都是在建構函式中定義的,而由所有例項共享的屬性constructor和方法sayName則是由原型中定義的。而修改了person1.friends(向其中添加了一個新字串),並不會影響到person2.friends,因為它們分別引用了不同的陣列。
-
這中建構函式與原型混成的模式,是目前在ECMAScript中使用最廣泛、認同度最高的一種建立自定義型別的方法。
參考javascript高階程式設計