JavaScript-this指向复习

45 阅读2分钟

环境对象this

  • 1.定义:指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境。this到底指向谁,是根据当时环境有关系的。

  • 2.作用

弄清楚this的指向,可以让我们代码更简洁

ps:每个函数里面都有this环境对象

  • 3.代码举例:

 function fn(){
     console.log(this); //window
   }

 fn();

 

总结:普通函数里面this指向的是window对象

 

  • 4.代码举例:

  <button>点击</button>

   <script>

     const btn = document.querySelector('button');

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

       console.log(this);    //<button>点击</button>,指向btn对象

     })

  </script>  

总结:this指向函数的调用者,此题中的this指向btn对象

 

  • 5.函数的调用方式不同,this所指代的对象也不同,所以this是一个对象

 

  • 6.谁调用,this就是谁-这是判断this指向的粗略规则

 

 * 7.代码举例


setTimeout(function (){
   console.log(this);  //windows,指向window对象
},1000)

 

  • 8.箭头函数中并不存在this,箭头函数会从他的上一级寻找this。

  • 9.箭头函数会默认帮我们绑定外层this的值,所以在箭头函数中this的值和外层的this是一样的。

  • 10.箭头函数中的this引用的就是最近作用域中的this。

  • 11.向外层作用域中,一层一层查找this,直到有this的定义。

 

 

  • 12.代码举例:
const user = {
  name: ‘小明’;
  //该箭头函数中的this为函数声明环境中this一致
  walk:() => {
     console.log(this);
     }  
}

总结:此时函数的this是对象user的所处环境window

 

13.代码举例


<button>点击,/button>

//DOM节点

const btn = document.querySelector('.btn');

btn.addEventListener('click', ()=>{
   console.log(this);
   //箭头函数,,此时this指向了window
});

 
//普通函数 此时this指向了DOM对象

btn.addEventListener(‘click’, function (){
   cosnole.log(this); //btn对象 ,<button>点击</buttom>
})

14.箭头函数不适用于构造函数、原型函数、DOM事件函数的等等。

 

15.this的指向是可以改的,有3个方法可以动态指定普通函数中的this指向,分别是

call()、 apply() 、bind()

 

9.call()方法

  •  使用call方法调用函数,同时指定被调用函数中的this值

  •   语法:fun.call(thisArg,arg1,arg2,...)

  • thisArg: 在fun函数运行时指定的this值

  • arg1,arg2:传递的行参

  • 返回值就是函数的返回值,因为call方法就是调用函数