标题:Object.defineProperty 中使用的箭头函数内的 JavaScript 此行为 [duplicate]

Title: JavaScript this behavior inside an arrow function used in Object.defineProperty [duplicate]

提问人:Kübra Aksu 提问时间:9/10/2023 更新时间:9/10/2023 访问量:21

问:

问题:

在 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 对象。有人可以解释为什么会发生这种行为以及如何实现所需的行为吗?

JavaScript 对象 未定义 箭头函数 defineproperty

评论

0赞 danh 9/10/2023
关于这一点,请参阅 MDN 页面,并注意 getter/setter 作为函数的示例:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...Object.defineProperty(o, "b", { get() { return bValue; }, ...

答:

0赞 moonwave99 9/10/2023 #1

在箭头函数中,this 保留了封闭词法上下文的 this 的值。换言之,在计算箭头函数的主体时,语言不会创建新的 this 绑定。

由于箭头函数是在全局范围内定义的,因此它绑定到 。window

如果使用常规函数,它将绑定到对象。