提问人:Kübra Aksu 提问时间:9/10/2023 更新时间:9/10/2023 访问量:21
标题:Object.defineProperty 中使用的箭头函数内的 JavaScript 此行为 [duplicate]
Title: JavaScript this behavior inside an arrow function used in Object.defineProperty [duplicate]
问:
问题:
在 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 未定义 typeof this.a 是 'undefined' 这是指全局对象(浏览器环境中的窗口) 我希望这指的是 obj 对象。有人可以解释为什么会发生这种行为以及如何实现所需的行为吗?
答:
0赞
moonwave99
9/10/2023
#1
在箭头函数中,this 保留了封闭词法上下文的 this 的值。换言之,在计算箭头函数的主体时,语言不会创建新的 this 绑定。源
由于箭头函数是在全局范围内定义的,因此它绑定到 。window
如果使用常规函数,它将绑定到对象。
评论
Object.defineProperty(o, "b", { get() { return bValue; }, ...