JavaScript继承和call()

继承

ES6之前没有extends继承。我们可以用构造函数加原型对象模拟实现继承,称为组合继承

call()

fun.call(thisarg,arg1,arg2,…)
thisArg:当前调用this的指向对象
功能:
1.调用函数
2.改变函数指向

输出andy

    <script>
        function fn(x,y){
            console.log('hhh');
            //正常指向window
            console.log(this);
            console.log(x+y);
        }
        var o={
          name='andy';
        }
        //1.调用函数
        fn.call();
        //2.改变函数指向
        //第一个o不会当做参数传输。
        fn.call(o,1,2);    
    </script>

子构造函数用父构造函数

父亲this指向子类this或理解为call()传进this,把父类构造函数拿过来。
指回:从左向右看,约等于链表。
1.指向子构造函数实例
2.先用call调用方法,然后把子this传进来
3.改为指向子类实例

输出子类构造函数

    <script>
        //父构造函数
         function father(name,age){
             //指向父构造函数实例
             this.name=name;
             this.age=age;
         }    
         function son(name,age){
             //指向子构造函数实例
             //先用call调用方法,然后把子this传进来
             //改为指向子类实例
             father.call(this,name,age);
         }    
    </script>

子类继承父类方法

son.prototype=father.prototype;
会有问题吗。

有问题:子类指向父类原型对象,**父类地址给了孩子。**这样父类有了子类的原型对象方法。子原型对象变化了,父类也会变化。约等于双方方法互通了。
解决方法
new一个father的实例对象。
父类实例通过_proto_指向father原型对象
这样son的_proto_拥有父类原型对象方法

      var father.baba=new father();
      son.prototype=baba.prototype;

问题:这样做缺点?

son的prototype的构造函数指向了父类,需要用constructor重新指回原来的构造函数。
指向、指回:从左向右看,约等于链表。

   son.prototype.constructor=son;

总结:传递的是地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值