1. 程式人生 > >Js面向物件程式設計——組合使用建構函式模式和原型模式

Js面向物件程式設計——組合使用建構函式模式和原型模式

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高階程式設計