首页 > 解决方案 > 通过实例方法和 this 访问 JS 类/对象变量 - 执行上下文

问题描述

第一个问题:为什么thisgetXArrow() 中的值等于解决方案对象?它不应该等于this调用它的解决方案对象的值,即 Window 对象吗?

第二个问题:JS 引擎不应该沿着每个函数的作用域链向上查找 x 的值吗?getX() 和 getXArrow() 的范围没有x,因此 JS 引擎将检查它们的调用者(解决方案对象)并找到x: 10,如构造函数中所声明的那样。相反,它似乎跳到了全局范围?

let x = 5
class Solution {
    constructor() {
        this.x = 10
    }
    getX() {
        console.log(this); 
        console.log(x); 
    }
    getXArrow = () => {
        console.log(this); 
        console.log(x); 
    }
}

s.getXArrow() // Output: Solution
              //         5
s.getX()      // Output: Solution
              //         5

谢谢!

标签: javascriptecmascript-6es6-classarrow-functionsexecutioncontext

解决方案


getX只有两个范围可访问:它自己的函数范围和全局范围。类不创建范围,因此x无法访问。但是,您确实可以通过this并且可以访问其.x属性来访问该实例。


推荐阅读