您的位置:首页 > Web前端 > JavaScript

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

2012-03-22 16:24 1071 查看
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()方法不存在的情况下,才会将它添加到原型中。这里对原型中所作的修改,能够立即在所有实例中得到反映。

注意:使用动态原型模式时,不能使用对象字面量重写原型,因为如果在已经创建了实例的情况下重写原型,那么就会切断现有实例与新原型之间的联系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐