Js面向对象程序设计——组合使用构造函数模式和原型模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaostrong/article/details/86098986

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高级程序设计

猜你喜欢

转载自blog.csdn.net/zhaostrong/article/details/86098986
今日推荐