六、(2)继承[js笔记]

6.2.1  原型链

js只支持实现继承,并且依靠原型链来实现的.

基本思想:利用原型让一个引用类型继承另一个引用类型的属性和方法。

构造函数、原型、实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。

实现原型链有一种基本模式:

FunctionSuperType(){

This.property=true;

}

Super.prototype.getSuperValue=function(){

Return this.property;

}

Function SubType(){

This.subproperty=false;

}

//继承了SuperType

SubType.prototype=new SuperType();

SubType.prototype.getSubValue=function(){

Return this.subproperty;

}

 

Var instance=new SubType();

Alert(instance.getSuperValue());//true


在上面代码中,我们没有使用SubType默认提供的原型,而是给它换了一个新原型;这个新原型就是SuperType的实例。这样新原型不仅具有作为一个SuperType的实例所拥有的全部属性和方法,而且内部还有一个指针,指向了SuperType的原型。最终结果就是这样:instance指向SubType.prototype,SubType.prototype又指向SuperType.prototype.

此时,instance.constructor现在指向的是SuperType

 

1.默认的原型

所有函数的默认原型都是Object实例,因此默认原型都会包含一个内部指针,指向object.prototype.


 

6.2.2 借用构造函数(伪造对象或经典继承)

即在子类型构造函数的内部调用超类型构造函数。

 

FunctionSuperType(){

This.colors=["red","blue","green"];

}

Function subType(){

//继承了SuperType

SuperType.call(this);

}

Var instance1=new SubType();

Instance1.colors.push("black");

Alert(instance1.colors);//red,bllue,green,black

 

Var inst=new SubType();

Alert(inst.colors);//red,blue,green

 

通过使用call()方法,实际上是在新创建的SubType实例的环境下调用了SubperType构造函数。这样就回在新SubType对象上执行SuperType()函数中定义的所有对象初始化代码。结果,subType的每个实例就都会具有自己的colors属性的副本了。

 

 

6.2.3   组合继承

将原型链和借用构造函数的技术组合到一块。其思路是使用原型链实现对原型属性和方法的继承,通过借用构造函数来实现对实例属性的继承。

FunctionSuperType(name)(

This.name=name;

This.colors=["red","blue","green"];

)

SuperType.prototype.sayName=function(){

Alert(this.name);

}

Function SubType(name,age){

//继承属性

SuperType.call(this,name);

This.age=age;

}

//继承方法

SubType.prototype=newSuperType();

 

SubType.prototype.sayAge=function(){

Alert(this.age);

}

Var inst=new SubType("Nicho",29);

Inst.colors.push("black");

Alert(inst.colors);//red,blue,green,black

Inst.sayName();//Nicho

Inst.sayAge();//29

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值