JavaScript的创建对象

组合使用构造函数模式和原型模式

构造函数模式

自定义类型并且定义类型的属性和方法,就是创建对象。

function Person(name,age){
	this.name = name;
	this.age = age;
	this.sayName = function(){
		alert(this.name);
	}
}

var person1 = new Person("Tony", 19);
var person2 = new Person("Bob",22);
alert(person1.sayName === person2.sayName)//false。即两个实例的该方法是两个不同的对象,重复定义了一个sayName

定义了一个Person对象,具有两个属性和sayName方法。
但是有一个问题,sayName方法位于构造函数中,每个实例在创建时都会创建一个sayName方法,在JavaScript中,函数就是对象,那么每次就会创建一个对象但是用处是重复的。当一个对象中有多个方法时就会创建很多个重复的实例方法。

原型模式

利用原型模式创建对象,使用原型对象可以让所有对象实例共享它所包含的属性和方法。

function Person(){
}
Person.prototype = {
	name : "Tony",
	age : 19,
	sayName : function(){
		alert(this.nama);
	}
};

在博文《原型对象的特殊点》提到过,原型对象中不能设置属性为引用类型,否则一个实例的该属性改变,所有实例的该属性都会跟着改变。虽然解决了方法重复定义的问题但是每个实例想要拥有特殊单独的属性就变得麻烦。

组合使用

用原型模式定义共同的方法,用构造函数定义每个实例独有的属性就完美解决了问题。

function Person(name, age){
	this.name = name;
	this.age = age;
}
Person.prototype = {
	constructor : Person,
	sayName : function(){
		alert(this.name);
	}
}
var person1 = new Person("Bob",22);
var person2 = new Person("Aishi",18);
alert(person1.sayName === person2.sayName);//true。即该方法在两个实例中完全相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值