假设我有这个对象:
api = {
x: 2,
func: () => {
this.x
}
}
如果我致电api.function,this
的范围是window
而不是api
?
如果我将func转换为常规匿名函数this
的范围是api
而不是window
。
任何人都可以向我解释这个吗?我认为箭头符号继承了父,这是api
答案 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
。