问题:
在 JavaScript 中的 Object.defineProperty 中使用箭头函数作为 getter 时,我遇到了意外行为。这是我的代码:
"use strict";
const obj = {
a: 10,
};
Object.defineProperty(obj, "b", {
get: () => {
console.log(this.a, typeof this.a, this);
return this.a + 10;
},
});
当我尝试访问 obj.b 时,输出是意外的:
this.a 未定义 this.a 的类型是“未定义” this 指的是全局对象(浏览器环境中的窗口) 我希望 this 引用 obj 对象。有人可以解释为什么会出现这种行为以及如何实现所需的行为吗?
在箭头函数中,this 保留封闭词法上下文的 this 值。换句话说,当评估箭头函数的主体时,语言不会创建新的 this 绑定。 来源
由于您的箭头函数是在全局范围内定义的,因此它绑定到
window
。
如果您使用常规函数,它将绑定到对象。