改变this指向的三个方法

改变this指向的三个方法

函数方法 有3个 1 call 2 apply 3bind(ES5新增)


        
        //call apply bind 都可以改变this指向
        //其中 call和apply改变时是在函数执行的时候改变 bind改变时是在函数定义的时候改变
        //定义一个函数实现两个数相加
        function demo(a, b) { 
            console.log(this);
            return a + b;
        }
        //改变this指向 第一个参数是你指定的this
        var result = demo.call({ 
            name: 1
        }, 1, 2);
        console.log(result);
		//返回值是上面函数定义的返回值 且使用call的同时 call执行函数
        //call方法有两个作用 1改变this指向(第一个参数) 2传递原函数所需的参数(剩余参数) 以逗号的格式分隔

        //2.apply
        //改变this指向 第一个参数是你指定的this 第二个参数是数组 数组里面是传递的参数
        var result1 = demo.apply({ 
            name: 2
        }, [2, 3]);
        console.log(result1);
		//使用apply方法的同时会执行函数
        //apply方法有两个作用 1.改变this指向(第一个参数) 2.传递原函数所需的参数 (第二个参数,数组)

        //3.bind
        //调用的时候不执行原函数
        var demo1 = demo.bind({ 
            name: 3
        }, 5, 9)
        demo(); //调用demo时发现this并没有改变 说明bind没有改变原函数中的this
        //因为bind是返回了一个新的函数
        demo1();
        var result2 = demo1(2, 3);
        console.log(result2);

        //总结 bind有两个作用:1返回一个新的函数 改变这个新函数中的this 2预传参数
		//预传参数之后 就算调用的时候有传递新的参数 也会以之前预传的参数为准

        //求一个数组中的最大值
        var arr = [1, 44, -9, 5, 26, 233, 54, 99];
        //Math.max(1,44,5,-9,56,233,53,99)
        let max = Math.max.apply("", arr)
        console.log(max);

        //求一个数组中的最小值
        let min = Math.min.apply("", arr)
        console.log(min);

总结:1、call方法在调用的时候会执行函数 第一个参数是this的指向 第二个参数以及后面的参数都是需要传的参数 返回值是原函数中定义的返回值
2、apply方法在调用的时候也会执行函数 第一个参数是this的指向 第二个参数是数组 其中是需要传递的参数 返回值是原函数中定义的返回值
3、bind方法在调用的时候不会执行函数 第一个参数是this的指向 第二个参数以及后面的参数都是需要传的参数 返回值是一个新的函数

    原文作者:江呱呱
    原文地址: https://blog.csdn.net/weixin_46500485/article/details/108344742
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞