2.32-call()方法实现继承

call()方法

1 call() 可以实现函数调用

2 可以改变函数中this指向 第一个参数是要改变this的值

比较:(后续做详细比较)

call(obj,1,2) apply(obj,[1,2]) apply()同等于call()

bind(obj,1,2) 只绑定一个函数,不调用

        function fun(a, b) {
            console.log(this);
            console.log(a, b);
            console.log('好好学习!');
        }
        var obj = {
            num: 100
        };
        fun(); // window.fun() 此时this === window
        // 1 call() 可以实现函数调用
        fun.call();
        // 2 可以改变函数中this指向 第一个参数实现this的改变
        fun.call(obj,10,20);  //this 指向{num: 100}

示例:

        function Fa(name, age) {
            console.log(this);
            this.name = name;
            this.age = age;
        }
		//父亲原型上添加一个方法
        Fa.prototype.getMoney = function() {
            console.log(1000000);
        }

        function Son(name, age) {
            // new Son的时候 this指向Son的实例Son{..}
            Fa.call(this, name, age); // Fa()
        }
        //Son.prototype = Fa.prototype; //直接赋值不好,因为constructor指向Fa,并且父亲也有study方法
        Son.prototype = new Fa('wjj', 23); // {name:'wjj',age:23,__proto__}
        Son.prototype.constructor = Son;
		//以上实现父亲方法的继承
        // 儿子自己专用的方法
        Son.prototype.study = function() {
            console.log('haohaoxuexi');
        }

        var zyc = new Son('张有才', 22);
        zyc.getMoney();
        console.log(zyc.name, zyc.age);


        /* 分析
            Fa        Fa.prototype ({constructor:Fa,getMoney:fun...})
                            ^ 
                            |
            Son       Son.prototype
        
           zyc.getMoney(); zyc.__proto__ === Son.prototype {name:'wjj',age:23,__proto__}
        */

图解分析:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值