丁鹿学堂:js中的this指向问题总结笔记(一)

62 阅读1分钟

其实开发中的this指向问题我们没怎么遇到过,因为不知道的时候直接console打印出来就行了。 但是在面试过程中经常会问到this指向的问题。 简单总结就是,谁调用指向谁。但是过于简单了,不容易理解,我们展开说说,在不同的情况下的this的指向问题

箭头函数

箭头函数的 this 不会被改变,箭头函数的 this 是在创建它时外层 this 的指向。也就是说箭头函数所在作用域的this指向哪里,箭头函数内部的this就指向哪里。 这里的箭头函数虽然是obj的属性,但是它声明的时候,是在全局作用域的(对象并没有自己的作用域),所以this指向window

let obj = {
  name:'zhangsan',
  fn:()=>{
    console.log(this)
  }
}
obj.fn() // window

注意:

  1. 箭头函数不能当做构造函数,所以不能与 new 一起执行
  2. 这个只是为了演示,所以日常开发中,箭头函数不作为对象的方式使用。
new 调用函数时this指向

当使用 new 关键字调用函数时,函数中的 this 一定是 JS 创建的新对象, 下面的this就是指向了创建的lisi对象,lisi.name 就是lisi

function Person(name){
  this.name  = name
  this.show = function(){
    console.log(this.name)
  }
}
let lisi = new Person('lisi')
lisi.show() // lisi