您当前的位置: 首页 > 学无止境 > JS经典实例 网站首页JS经典实例
javascript对象与原型-继承-原型式、寄生、组合寄生
发布时间:2016-10-16 13:49:44编辑:雪饮阅读()
原型式继承:
//临时中转函数
function obj(o){
//o参数表示将要传递进入的一个对象
//F构造函数是一个临时新建的对象,用来存储传递过来的对象
function F(){}
F.prototype=o;//将o对象实例赋值给F构造的原型对象
return new F();//最后返回这个得到传递过来对象的对象实例
}
//下面是字面量创建实例的声明方式,相当于var box=new Box();
var box={
name:'雪饮',
age:24,
family:['哥哥','杜姐姐','妹妹']
}
//box1就等于new F()
var box1=obj(box);
alert("box1-name:"+box1.name);
box1.name="杜敏捷";
alert("box1-modify-name:"+box1.name);
alert("box1-family:"+box1.family);
box1.family.push('弟弟');
alert("box1_add_family:"+box1.family);
var box2=obj(box);
alert("box2-family:"+box2.family);
alert("box2-name:"+box2.name);
//仔细观察以上弹出会发现普通属性虽然在原型中但通过实例修改实例自身属性并不会影响到原型,而引用类型属性被实例修改则会影
寄生方式继承:原型+工程模式继承
//临时中转函数
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
//寄生函数
function create(o){
var f=obj(o);
//寄生函数可进行对继承的扩展
f.run=function(){
return this.name+'方法';
}
return f;
}
var box={
name:'雪饮',
age:24,
family:['哥哥','杜姐姐','妹妹']
}
var box1=create(box);
alert(box1.run());
组合寄生模式继承:
//组合寄生继承方式
//临时中转函数
function obj(o){
function F(){}
F.prototype=o;
return new F();
}
//寄生函数
function create(box,desk){
var f=obj(box.prototype);//box的原型run函数返回给f
f.constructor=desk;//调整原型构造指针,原本构造应该是指向box的
desk.prototype=f;
}
function Box(name,age){
this.name=name;
this.age=age
}
Box.prototype.run=function(){
return this.name+this.age+'运行中。。。';
}
function Desk(name,age){
Box.call(this,name,age);//对象冒充
//有了对象冒充就可以继承run,而没有它就只能继承name这类普通属性
}
//通过寄生组合继承来实现继承
create(Box,Desk);
//这句用来替代Desk.prototype=new Box();
var desk=new Desk("杜姐姐",24);
alert(desk.run());
alert(desk.constructor);
/*整体实现思路:
通过create(create通过obj临时存储函数返回原型run为一个对象)获取box的原型方法run作为desk的原型,同时将原指向box的构造指针改指向为desk。然后desk又对象冒充了box的对象实例属性
*/
关键字词:javascript,对象,原型