标题:JavaScript 在 Object.defineProperty 中使用的箭头函数内执行此行为

问题描述 投票:0回答:1

问题:

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

javascript object undefined arrow-functions defineproperty
1个回答
0
投票

在箭头函数中,this 保留封闭词法上下文的 this 值。换句话说,当评估箭头函数的主体时,语言不会创建新的 this 绑定。 来源

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

window

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

© www.soinside.com 2019 - 2024. All rights reserved.