当前位置:编程学习 > JAVA >>

3步 实现Javascript继承

如果你是Javascript大牛,此文章对你无意义.

 


@author YHC

首先在Javascript中是没有继承extend这个关键字的,那么在Java,C#,....等等面向对象语言中,在继承时可通过关键字实现,他们的运行原理也许有所不同,但是他们都有一个共同点就是

在调用子类的构造函数时,都隐示调用了父类的构造方法,那么在js中我们也可以通过代码 实现.分为3步:

1.在子类构造函数中调用父类构造函数.

2.修改子类prototype(原型链)属性为父类的实例.

3.重置子类的prototype的constructor属性为子类.

代码:


[javascript]
/**
      Person类
     */ 
    function Person(name){ 
        //赋值name属性  
        this.name=name; 
        /**
         获得Person类的name属性
        */ 
        this.getName=function(){ 
            return this.name; 
        }; 
    } 
     
    ////创建Person类实例  
    var pp=new Person('Master'); 
    //输出name属性值  
    alert(pp.getName()); //结果:Master  
     
    /**
    Student类
    **/ 
    function Student(name,score){ 
       //调用父类构造方法,并传递name参数  
       Person.call(this,name); 
       //赋值Score属性  
       this.score=score; 
       /**
                    获得score属性值
       */ 
       this.getScore=function(){ 
        return score;    
       }; 
    } 
     
    //将Student的原型链指向Person对象  
    Student.prototype=new Person(); 
    //重置constructor属性为Student类,由于设置了Student类的prototype为Person时  
    //擦除了constructor属性  
    Student.prototype.constructor=Student; 
     
    //实例化Student类  
    var s=new Student('Master',100); 
    //输出学生name和score属性值  
    alert(s.getName()+':'+s.getScore());//结果:Master:100 

/**
      Person类
     */
    function Person(name){
     //赋值name属性
     this.name=name;
     /**
      获得Person类的name属性
     */
     this.getName=function(){
      return this.name;
     };
    }
   
    ////创建Person类实例
    var pp=new Person('Master');
    //输出name属性值
    alert(pp.getName()); //结果:Master
   
    /**
    Student类
    **/
    function Student(name,score){
       //调用父类构造方法,并传递name参数
       Person.call(this,name);
       //赋值Score属性
       this.score=score;
       /**
                    获得score属性值
       */
       this.getScore=function(){
     return score;  
       };
    }
   
    //将Student的原型链指向Person对象
    Student.prototype=new Person();
    //重置constructor属性为Student类,由于设置了Student类的prototype为Person时
    //擦除了constructor属性
    Student.prototype.constructor=Student;
   
    //实例化Student类
    var s=new Student('Master',100);
    //输出学生name和score属性值
    alert(s.getName()+':'+s.getScore());//结果:Master:100

 

在Javascript中每一个对象都有一个prototype属性,这个属性要么是null要么是指向一个对象.在Student s对象访问s.getName()属性时如果这个方法或者成员在本对象中为查找到

那么JavaScript会逐一易做图每一个原型对象,直到找到该成员为止,或者一个查找到Object.prototype对象.如果是这样那么继承另一个类我们就只需要将子类的prototype属性指向父类的示例就OK了,

那么为什么我们还需要重置子类Student.prototype.constructor属性?因为我们在设置Student.prototype这个属性为父类实例的时候这个属性被擦除了,所以需要重置.

 


 

补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,