You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中在Object.defineProperty内使用箭头函数时的this行为

JavaScript中在Object.defineProperty内使用箭头函数时的this行为

嘿,这个问题其实是箭头函数的核心特性导致的,我来给你捋明白~

首先得搞清楚箭头函数和普通函数在this绑定上的本质区别:

  • 普通函数的this是动态绑定的,它的值取决于函数的调用方式。比如作为对象的getter调用时,this会指向被访问的对象本身。
  • 但箭头函数不一样,它没有自己独立的this,它的this是词法绑定的——也就是直接继承自它定义时所在的外层作用域的this,完全不会跟着调用上下文变化。

回到你的代码里,你把getter写成了箭头函数:

get: () => {
  console.log(this.a, typeof this.a, this);
  return this.a + 10;
}

这个箭头函数定义的时候,外层作用域是全局作用域(因为你的代码在全局环境执行),所以它的this就绑定到了全局对象(浏览器里是Window,Node.js里是global),完全不会跟着getter的调用对象obj走。这就是为什么你访问obj.b时,this.a是undefined,this指向全局对象。

那要实现你想要的效果(this指向obj),只需要把箭头函数换成普通函数就行:

"use strict";

const obj = {
  a: 10,
};

Object.defineProperty(obj, "b", {
  get: function() {
    console.log(this.a, typeof this.a, this);
    return this.a + 10;
  },
});

现在再访问obj.b,你会发现this指向obj,this.a是10,返回值是20,完全符合你的预期啦~

备注:内容来源于stack exchange,提问作者Kübra Aksu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:48:14