0
点赞
收藏
分享

微信扫一扫

改变this指向问题笔记

冶炼厂小练 2022-04-27 阅读 61

改变函数内部this指向一共有三种方法,分别为call方法,apply方法和bind方法。

总结: call方法与apply方法,作用,效果,都是完全一致的
        只是对于原始函数的参数赋值方法,不同
        call方法是通过其他多个参数来实现
        apply方法是通过一个数组参数,来实现
        两个方法没有本质的区别,可以随意选择

总结:
    call apply 都是立即执行函数
        参数1,都是改变的this指向
        其他参数,是原始函数的形参(可以有,也可以没有)
    bind 不是立即执行函数,是生成一个新的函数
        参数1,是改变的this指向
        就使用原始函数的形参

示例:

<script>
        //call方法 
        var o = {
            name: 'andy'
        };

        function fn(a, b) {
            console.log(this);
            console.log(a + b);
        };
        fn.call(o, 1, 2);
        //call可以调用函数,也可以改变函数内的this指向
        //call的主要作用可以实现继承

        //apply方法
        var p = {
            name: 'aaa'
        };

        function nn(arr) {
            console.log(this);
            console.log(arr);
        };
        nn.apply(p, ['pink']);
        //也是调用函数,可以改变内部指向
        //但是它的参数必须是数组(伪数组)
        var arr = [1, 66, 3, 99, 4, 999];
        var max = Math.max.apply(Math, arr);
        console.log(max);

        //bind方法
        var w = {
            name: 'www'
        };

        function ww(a, b) {
            console.log(this);
            console.log(a + b);
        };
        var f = ww.bind(w, 1, 2);
        f();

箭头函数this指向:

重点:箭头函数,不能改变this指向,只有普通function函数,能改变this指向

  示例:

  箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this。

  如果父级程序有this指向(父级程序也是函数),this指向的就是父级程序的this指向。

  如果父级程序没有this指向(数组,对象...),this指向的就window。

  例子:

举报

相关推荐

0 条评论