javascript中创建自定义类型的最常见的方式_组合使用构造函数模型和原型模式,动态原型模式...

本文探讨了JavaScript中构造函数模式和原型模式的组合使用,以及动态原型模式的应用。通过实例详细解析了如何利用这两种模式优化内存使用,实现实例属性的独立性和方法的共享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这样每个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的引用,最大限度地节省了内存。

 
//构造函数模式用于定义实例属性
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.friend=["xj","nn"];
}

//原型模式用于定义方法和共享属性
Person.protoype={
constructor:Person,
sayName:function(){
alert(this.name);
}
}
var person1=new Person("AA",22,"Engineer");
var person2=new Person("BB",33,"Software");

person1.friends.push("Van");
alert(person1.friends); //"xj,nn,Van"
alert(person1.friends);//"xj,nn"

 实例属性都是在构造函数中定义的,而由所有实例共享的属性constructor和方法sayName()则是在原型中定义的。

 

2.动态原型模式

动态原型模式把所有的信息都封装在构造函数中,而通过在构造函数中初始化原型,又保持了同时使用构造函数和原型的优点。

function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;

//如果不是方法,则把它改为方法,并添加到原型中
if(typeof this.sayName!="function"){
Person.prototype.sayName=function(){
alert(this.name);
};
}
}

//使用
var person=new Person("alal",22,"Software Engineer");
person.sayName();

这里只在sayName()方法不存在的情况下,才会将它添加到原型中。这里对原型中所作的修改,能够立即在所有实例中得到反映。

 

注意:使用动态原型模式时,不能使用对象字面量重写原型,因为如果在已经创建了实例的情况下重写原型,那么就会切断现有实例与新原型之间的联系。

 

转载于:https://www.cnblogs.com/cqclassic/archive/2012/03/22/2411829.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值