这在一个对象文字中的箭头符号函数内

时间:2017-08-03 03:21:10

标签: javascript ecmascript-6 this

假设我有这个对象:

    api = {
        x: 2,
        func: () => {
            this.x
        }
    }

如果我致电api.function,this的范围是window而不是api

如果我将func转换为常规匿名函数this的范围是api而不是window

任何人都可以向我解释这个吗?我认为箭头符号继承了父,这是api

2 个答案:

答案 0 :(得分:2)

箭头函数从其词法范围继承this,意味着this在其定义范围内的含义相同。

这是包含该代码的函数中的this;它与你放置箭头功能的范围无关。

答案 1 :(得分:0)

简单解释:问题是该函数是在api对象之前创建的,并且由于您位于window范围内,因此它特意绑定到您的窗口中的窗口。如果我使用ES5 bind略微重写您的代码,您可以获得以下内容

const func = function() {
  this.x
}.bind(this); // here this is a window in your case

api = {
    x: 2,
    func: func 
}

此代码与您的代码相同。在这里,您可以清楚地看到您的函数不属于对象api