改变this指向的三种方法

<!-- <script>

        // 如果函数的内部的this跟我们想要的不一样,我们就可以改变函数内部的this

        var obj = {username : 'zhangsan'}

        function fn(a,b){

            console.log(this)

            console.log(a,b)

        }

        // 这里的this指向window

        fn()

        // call是函数的方法,函数本质也是对象,也有方法

        /*

            call语法: `函数名.call(要改变的 this 指向,要给函数传递的参数1,要

            给函数传递的参数2, ...)

            - fn()` 的时候,函数内部的 this 指向 window

            - `fn.call(obj, 1, 2)` 的时候,函数内部的 this 就指向了 obj 这个对象

            - 使用 call 方法的时候

            - 会立即执行函数

            - 第一个参数是你要改变的函数内部的 this 指向

            - 第二个参数开始,依次是向函数传递参数

        */

        // {username: 'zhangsan'}  100 200

        fn.call(obj,100,200)

    </script> -->

    <!-- <script>

        /*

            apply方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

            语法: `函数名.apply(要改变的 this 指向,[要给函数传递的参数1,

            要给函数传递的参数2, ...])

            `fn()` 的时候,函数内部的 this 指向 window

            - fn.apply(obj, [1, 2])` 的时候,函数内部的 this 就指向了 obj 这个对象

            - 使用 apply 方法的时候

            - 会立即执行函数

            - 第一个参数是你要改变的函数内部的 this 指向

            - 第二个参数是一个 **数组**,数组里面的每一项依次是向函数传递的参数

        */

       var obj = {

           name:'Jack'

       }

       function fn(a,b){

            console.log(this)

            console.log(a,b)

       }

    //    这里的this指向window

       fn()

    //    这里的this指向obj对象{name: 'Jack'},  a=1,b=2

       fn.apply(obj,[1,2])

    </script> -->

    <!-- <script>

        /*

            bind- bind` 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

            - 和 call / apply 有一些不一样,就是不会立即执行函数,而是返回一个已经

                改变了 this 指向的函数

            - 语法: `var newFn = 函数名.bind(要改变的 this 指向); `

            - ​ `newFn(传递参数)`

            - bind 调用的时候,不会执行 fn 这个函数,而是返回一个新的函数

            - 这个新的函数就是一个改变了 this 指向以后的 fn 函数

            - `fn(1, 2)` 的时候 this 指向 window

            - `newFn(1, 2)` 的时候执行的是一个和 fn 一摸一样的函数,只不过里面的

                this 指向改成了 obj

        */

       var obj = {

           name:'Jack'

       }

       function fn(a,b){

            console.log(this)

            console.log(a,b)

       }

    //    指向window,1,2

       fn(1,2)

       var newFn = fn.bind(obj)

    //    指向obj,1,2

       newFn(1,2)

       /*

            fn(a,b){

            console.log(this)

            console.log(a,b)

        }

       */

       console.log(newFn)

    </script> -->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值