JS类的三种继承方式

这篇博客详细介绍了JavaScript中的三种继承方式:原型链继承、冒充继承(通过call或apply)以及组合继承。通过实例展示了每种方式的实现代码和优缺点。作者还提到了call和apply的相同点和不同点,并以一个教师类和学生类为例,说明了如何在实际编程中应用这些继承概念。
摘要由CSDN通过智能技术生成

            //人类

 function Person(name,age){
     this.name=name;
     this.age=age;
 }
 Person.prototype.run=function(){
     console.log(this.name+"正在散步");
 }


            //领导类
            //1,原型链继承:将原型改成对应的对象(缺点:无法初始化对应的属性)

  function Leader(name,age){
                
   }
   Leader.prototype=new Person("人",48);

   var l1=new Leader("领导",46);
   l1.run();    //(人)正在散步

           

 //教师类
 //2,冒充继承:通过call或者apply改变原有函数的this指向(缺点:无法将原型中的属性和方法继承过来)

 function Teacher(name,age){
      Person.call(this,name,age);
      //Person.apply(this,[name,age]);
 }

 var t1=new Teacher("教师",30);
 console.log(t1.name);    //教师
 t1.run();    //报错:t1.run is not a function

        call 和 apply 的相同点和区别

        相同点:都是改变原有函数的this指向

        不同点:传入参数形式不同,

                        call 以逗号隔开 .call(对象,参数1,参数2,参数3)。

                        apply 以数组的形式 .apply(对象,【参数1,参数2,参数3】)

          apply 的另一种用法,把以数组形式的参数变为以逗号隔开的形式

          var arr=[1,5,3,7,8,4]; 

         var result=Math.max(arr)   //错误写法 ,报错     var result=Math.max(1,5,3,7,8,4)    

          var result2=Math.max.apply(null,arr)  //8

       //学生类
            //3,组合继承:原型链继承+冒充继承    

 function Student(name,age){
      Person.call(this,name,age);
      //Person.apply(this,[name,age]);
 }
 Student.prototype=new Person();

 var s1=new Student("学生",20);
 s1.run();    //(学生)正在散步

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值