JS class中函数this指向问题

示例

let a = {
    name: 'A',
    hehe: function () {
        let f1 = function () {
            console.log('f1', this)
        }
        let f2 = () => {
            console.log('f2', this)
        }
        f1()
        f2()
    }
}
a.hehe()
// 输出结果
// f1 window对象
// f2 a对象


class A {
    constructor () {
        this.name = 'A'
    }
    hehe () {
        let f1 = function () {
            console.log('f1', this)
        }
        let f2 = () => {
            console.log('f2', this)
        }
        f1()
        f2()
    }
}
let a = new A()
a.hehe()
// 输出结果
// f1 undefined
// f2 a对象

对于f2,由于是箭头函数,this相当于普通变量,本身没有时向父级作用域获取,因此获取到对象a

对于f1,结果确实应该是undefined,但由于代码并未采用严格模式,因此输出的应当是window对象。经查阅MDN(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Classes),class中默认采用严格模式,因此即使我不显示地声明严格模式,f1中仍会输出undefined

严格模式

类声明和类表达式的主体都执行在严格模式下。比如,构造函数,静态方法,原型方法,getter和setter都在严格模式下执行。

你可能感兴趣的:(JS class中函数this指向问题)