3步美高梅娱乐场网站 实现Javascript继承

发布时间:2019-09-11  栏目:计算机教程  评论:0 Comments

在实际的项目中,我们通常都是用构造函数来创建一个对象,再将一些常用的方法添加到其原型对象上。最后要么直接实例化该对象,要么将它作为父类,再申明一个对象,继承该父类。

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

而在继承的时候有两种常用方式,今天我们就来稍作探讨

 

复制代码 代码如下:

@author YHC

//父类
 function Person(name){
    this.name = name;
};

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

 // 子类
 function Student(sex){
  Person.apply(this,arguments); //继承父类的构造函数
  this.sex=sex;
 };

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

1,继承Prototype:

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

复制代码 代码如下:

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

Student.prototype = Person.prototype;
//执行完此句时,Student.prototype.constructor
指向的是Person,为什么了?因为Person.prototype.constructor指向Person,对象的赋值实质上是引用赋值,所以Student.prototype.constructor也指向Person
Student.prototype.constructor = Student;  // 
将Student.prototype.constructor 指回Person

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

用Person的原型对象来覆盖Student的原型对象;前面说到对象的赋值实质上是引用赋值,所以如果Student.prototype上的任何修改都会体现到Person.prototype中,即子类会影响父类。

代码:

看下面:

[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

留下评论

网站地图xml地图