其实开发中的this指向问题我们没怎么遇到过,因为不知道的时候直接console打印出来就行了。 但是在面试过程中经常会问到this指向的问题。 简单总结就是,谁调用指向谁。但是过于简单了,不容易理解,我们展开说说,在不同的情况下的this的指向问题
箭头函数
箭头函数的 this 不会被改变,箭头函数的 this 是在创建它时外层 this 的指向。也就是说箭头函数所在作用域的this指向哪里,箭头函数内部的this就指向哪里。 这里的箭头函数虽然是obj的属性,但是它声明的时候,是在全局作用域的(对象并没有自己的作用域),所以this指向window
let obj = {
name:'zhangsan',
fn:()=>{
console.log(this)
}
}
obj.fn() // window
注意:
- 箭头函数不能当做构造函数,所以不能与 new 一起执行
- 这个只是为了演示,所以日常开发中,箭头函数不作为对象的方式使用。
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