美文网首页
JS class中函数this指向问题

JS class中函数this指向问题

作者: tysnd | 来源:发表于2022-03-08 12:54 被阅读0次

    示例

    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指向问题

          本文链接:https://www.haomeiwen.com/subject/cldarrtx.html