您当前的位置: 首页 > 学无止境 > JS经典实例 网站首页JS经典实例
javascript对象与原型-构造+原型式创建对象
发布时间:2016-10-16 13:46:03编辑:雪饮阅读()
组合构造函数+原型模式:
组合构造函数+原型模式可解决实例共享对象的属性(公有部分)以及每个实例自己独有的部分
//组合构造函数+原型模式
//独立部分用构造函数
function Box(name,age){
this.name=name;
this.age=age;
this.family=['哥哥','杜姐姐','妹妹'];
}
//共享的用原型
Box.prototype={
constructor:Box,
run:function(){
return this.name+this.age+'运行中...'
}
}
var box1=new Box('雪饮',24);
box1.family.push('弟弟');
var box2=new Box('杜敏捷',24);
alert(box1.run());
alert(box2.run());
alert(box1.family);
组合构造函数+原型模式的封装:
function Box(name,age){
this.name=name;
this.age=age;
this.family=['哥哥','姐姐','妹妹'];
alert("执行了原型初始化");
Box.prototype.run=function(){
return this.name+this.age+'运行中。。';
}
alert("原型初始化结束");
}
var box1=new Box('雪饮',24);
但这种封装有个缺点,因为构造函数在每次new的时候都会执行,那么原型初始化将会每次重新初始化,影响性能
动态原型模式:弥补组合构造函数+原型模式的封装所导致性能影响的缺点
function Box(name,age){
this.name=name;
this.age=age;
this.family=['哥哥','姐姐','妹妹'];
if(typeof this.run!='function'){
alert("原型初始化");
Box.prototype.run=function(){
return this.name+this.age+'运行中。。';
}
alert("原型初始化结束");
}
}
var box1=new Box('雪饮',24);
var box1=new Box('柠檬不萌',24);
这样以来即便你创建100个,1000个实例都只会初始化原型一次哦
寄生构造函数:工厂模式+构造函数
function Box(name,age){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.run=function(){
return this.name+this.age+'运行中》》》';
}
return obj;
}
var box1=new Box('雪饮',24);
alert(box1.name);
稳妥构造函数:
在一些安全的环境中,比如禁止使用this和new,这里的this是构造函数里不使用this,这里的new是在外部实例化构造函数时
不使用new,这种创建方式叫做稳妥构造函数。
function Box(name,age){
var obj=new Object();
obj.run=function(){
return name+age+'运行中...';
};
return obj;
}
var box=Box('雪饮',24);
alert(box.run());
关键字词:javascript,对象,原型