继承

//----继承:通过原型链实现----------
function Box(){//被继承的函数叫做超类型(其他语言中的父类,派生类)
this.name="lee";
}
function Desk(){//集成的函数叫做子类型(其他语言中叫做子类,派生类)
this.age=100;
}

//通过原型链继承,超类型实例化后的对象实例,赋值给子类的原型属性
Desk.prototype=new Box();
var desk=new Desk();
alert(desk.name);
继承也有之前问题,比如字面量重写原型会中断关系,使
用引用类型的原型,并且子类型还无法给超类型传递参数。
为了解决引用共享和超类型无法传参的问题,我们采用一种叫借用构造函数的技术,或
者成为对象冒充(伪造对象、经典继承)的技术来解决这两种问题。


//----使用对象冒充继承:只能继承构造里的信息,不能继承原型中的
function Box(name,age){
this.name=name;
this.age=age;
this.family=["1","2","3"]
}
Box.prototype.family="4";
function Desk(name,age){
Box.call(this,name,age);//对象冒充
}
var desk=new Desk('gt',100);
alert(desk.name);
alert(desk.family);//1,2,3

构造函数里的方法,放在构造函数里,每次实例化都会分配一个新的地址,浪费,
所以最好放在原型中,保证多次实例化只有一个地址。

var Box=function(name,age){
this.name=name;
this.age=age;
}

Box.prototype.run=function(){
return this.age+this.name+'loading';
}

var Desk=function(name,age){
Box.call(this,name,age);
}

var desk=new Desk('gt',100);
alert(desk.name);
虽然这样写是正确的,但却访问不到原型中的方法


// 借用构造函数虽然解决了刚才两种问题,但没有原型,复用则无从谈起。
// 所以,我们需要原型链+借用构造函数的模式,这种模式成为组合继承
//---组合继承:可继承构造函数中的,也可继承原型中的------
var Box=function(name,age){
this.name=name;
this.age=age;
}

Box.prototype.run=function(){   //共享的方法
return this.age+this.name+'loading';
}

var Desk=function(name,age){
Box.call(this,name,age);  //对象冒充:集成构造函数中的
}

Desk.prototype=new Box();//原型链继承:继承原型中的

var desk=new Desk('gt',100);
alert(desk.run());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值