javascript 继承

 继承:就是子类可以随便用父类public,protected的方法和属性,

   最糟糕的情况是,即使子类什么也不会,只要父类什么都会,就够了, 现在流行拼爹时代!!

一、Prototype Chaining:   继承的主要方法,就是把所有的Prototype 连接起来。下面是两个原型相连接,即子类可以用父类的方法和属性,也不知道也像java一样,有没有权限问题? 

  如:1、SuperType构造函数:

             实例:SubType.prototype

            原型: SuperType Prototype

       2、SubType 构造函数:  

             实例:instance 

            原型: SubType Prototype

所以:SuperType实例和SubType Prototype合并成一个SubType Prototype

        1》SuperType.prototype实例有一个[[Prototype]]属性指向SuperType Prototype

        2》SuperType.prototype实例有一个属性property=true.

        3》SubType Prototype本身增加一个方法getSubValue()

 所以SubType Prototype的内容=SuperType实例具有的数据+SubType Prototype本身具有的信息。

  第一:代码

SubType

function SuperType(){//父类
this.property = true;
}//定义公共方法
SuperType.prototype.getSuperValue = function(){
return this.property;
  };
function SubType(){//子类
  this.subproperty = false;
}
//inherit from SuperType,子类的原型指向父类的实例。
SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function (){
return this.subproperty;
};
var instance = new SubType();
alert(instance.getSuperValue()); //true

 第二:图形 
   

  例如:调用instance.getSuperValue() ,即子类可以调用父类的方法。

    找getSuperValue属性有3个步骤:

          1) the instance,在实例instance上找getSuperValue得属性,未找到。

         2)SubType.prototype,在SubType.prototype 的原型上找,未找到

        3) SuperType.prototype, 在SuperType.prototype原型上找,找到,是父类的一个公共函数。

      查找属性和方法,从实例出发,沿找Prototype Chaining一直到没有路可走为止。

二、Default Prototypes

      所有的引用类型默认继承Object, 这是通过prototype chaining 来完成。 对一些函数,默认的prototype对象的一个实例, 意味着它的内部prototype指针指向Object.prototype. 这是自定义类型如何默认的继承所有默认的方法,如 toString() 和valueOf(). 因此以前的例子有一个外部继承层。 

    Figure 6-5显示一个完整  prototype chain.
      
   
      SubType 继承 SuperType,  而SuperType 继承 Object. 当 instance.toString() is called, 调用的方法存在Object.prototype 里。

三、Prototype and Instance Relationships
   有2个联系:

      1、java 中,这是运行时,用来判断一个实例是否属于一个类对象的,下面也差不多。

            只要构造函数出现在Prototype 链上,表示实例就是所有链上的构造函数。

            alert(instance instanceof Object); //true

           alert(instance instanceof SuperType); //true
            alert(instance instanceof SubType); //true

           这儿,因为原型链的关系,一个 instance 对象技术上说也是Object, SuperType, and SubType的 一个实例
           结果是 instanceof 对所有这些构造函数返回 true。

  2、使用isPrototypeOf() 方法。在原型链中,返回Ture。
       Object.prototype.isPrototypeOf(instance):表示Object.prototype的原型是实例的原型。
         alert(Object.prototype.isPrototypeOf(instance)); //true
         alert(SuperType.prototype.isPrototypeOf(instance)); //true
          alert(SubType.prototype.isPrototypeOf(instance)); //true

四、
     

function SuperType(){
   this.property = true;
  }
SuperType.prototype.getSuperValue = function(){
    return this.property;
  };
function SubType(){
    this.subproperty = false;
}
//inherit from SuperType
SubType.prototype = new SuperType();
//new method
SubType.prototype.getSubValue = function (){
   return this.subproperty;
  };
//override existing method
SubType.prototype.getSuperValue = function (){
   return false;
  };

var instance = new SubType();
alert(instance.getSuperValue()); //false









  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值