一、函数的this指向

        this是每一个函数都 一定有的关键词

        this本质上是一个对象数据结构 用于指向数据

        通过this关键词,可以调用操作这个 数据

        1、this指向window    声明式函数 匿名函数 定时器 延时器 forEach循环

        2、this指向事件源     事件绑定中,事件处理函数 this指向默认是事件源,也就是绑定事件的标签对象

        3、this指向数组/对象 数组/对象 中存储的函数this指向是这个数组/对象

二、箭头函数的this指向

        箭头函数的this指向 是 父级程序的this指向

        如果没有父级程序 或者 父级程序没有指向 箭头函数的this指向是window

(1)匿名函数绑定的事件处理函数 this指向默认是事件源 也就是div标签对象

 oDiv.addEventListener('click' , function(){

         console.log(this);

  })

 (2)箭头函数的this指向,是父级程序的this指向,下面的箭头函数没有父级程序,所以this指向是window

oDiv.addEventListener('click' , ()=>{

            console.log(this);

 })

(3)对象中定义的函数 和箭头函数

  const obj = {

            name:'张三',

            age:18,

            sex:'男',

        //    对象中定义的函数 this指向是这个对象本身

             fun1:function(){

                console.log(this)

            },

        //     箭头函数,this指向是父级程序

        //     当前箭头函数,父级程序是对象

        //     对象是没有this的,箭头函数this指向是window

            fun2:()=>{

                 console.log(this)

            },

            fun3:function(){

        //         定义在对象中的函数fun3,this指向是对象本身

        //         函数fun4是一个箭头函数

        //         存储在 函数fun3 中 父级程序就是函数fun3

        //         函数fun3的this指向是存储fun3的对象obj

        //         箭头函数fun4 的this指向 和 父级程序fun3的this指向相同

        //         也就是 obj对象本身

               const fun4 = ()=>{

                    console.log(this);

                }

                fun4();

             }  

        };  

三、改变this指向 ==>通过JavaScript提供的函数方法

       1、调用执行函数时 改变this指向

       call

                函数调用.call(参数1,参数2,参数3......)

                参数1:要改变的指向

                之后的参数2,参数3......是原始函数需要的数据

             apply

                函数调用.apply(参数1,[参数2,参数3....])

                参数1:要改变的this指向

                之后的所有参数以数组的形式赋值 原始函数需要的数据

        call和apply执行程序的原理、结果都完全一致,只是给原始函数赋值参数的语法形式不同  

        2、【生成新的函数】时 改变this指向

        bind

                函数.bind(参数1,参数2,参数3....)

                参数1:新的this指向

                之后所有的参数 参数2,参数3......都是原始函数需要的参数数据

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐