javascript中关于继承的理解,简单粗暴

继承

原型链
利用实例,原型对象,构造函数之间的关系实现继承
  Truck.prototype=new Car();

重写方法就是继承之后,对原方法进行重新定义·
原型链的问题
1.A继承上面的构造函数后,它会默认所有的方法和函数都是A的,如果我们创建一个实例向属性中加入新的参数c,
后面的实例再调用都会输出c,改变了参数的值
2.不能通过子类型的实例向父类传参

借用构造函数
完美解决了原型链的问题
利用父类的call(),apply()方法
//call接受两个参数,一是函数运用的作用域,二是参数列表(要把参数列出来)
apply和它类似,但是接受的是参数数组

通过call和apply方法,既可以继承父类,也可以向父类传参

在使用call或者apply方法时,相当于有父类的副本,当创建子类实例时,只是在调试它的参数,
并不会改变父类的参数,那么后面的实例再继承时,就不会输出前面实例加入的参数了
  Car.call(this,brand,color);

弊端就是,在构造函数里面写方法,方法失去复用性

组合继承

一般使用组合继承

结合原型链和借用构造函数的优点

 

继承属性用借用构造函数 (属性写在构造函数里面)
继承方法用原型链   (方法用原型对象的方式加入)
 <div id="put" ></div>
    <script>
        function Car(brand,color){
            this.brand=brand;
            this.color=color;
        }
        Car.prototype.getbrand=function(){
            return this.brand;
        }
        Car.prototype.getcolor=function(){
            return this.color;
        }
        function Truck(brand,color,place){//传参,
          Car.call(this,brand,color);//继承属性   解决使用原型链时属性被更改的问题
          this.place=place;
        }
        Truck.prototype=new Car();//继承方法    解决使用借用构造函数时方法复用性不好的问题
        Truck.prototype.getplace=function(){
            return this.place;
        }   
        var truck1=new Truck("奥迪a6","白色","德国"); 
     document.getElementById("put").innerText="品牌:"+truck1.getbrand()+"\n"+"颜色:"+truck1.getcolor()+"\n"+"产地:"+truck1.getplace();
     
     
    </script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值