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

ES6中如何从子方法引用父对象?优雅实现方案咨询

解决对象方法访问内部属性的优雅方案

你的问题核心在于用了箭头函数定义addStuff方法——箭头函数没有自己的this上下文,它会继承外层作用域的this,所以在对象字面量里的箭头函数,this根本不会指向myObj,自然没法通过this.state访问内部数据,self没用也是因为你没提前定义它。

下面给你两种更优雅的实现方式:

1. 使用普通函数定义方法(推荐)

这是最符合JS对象方法设计的方式,普通函数作为对象方法时,调用它的对象(也就是myObj)会成为函数的this,这样就能顺利访问内部的state属性:

const myObj = {
  state: { a: 1, b: 1 },
  // ES6方法简写,本质是普通函数
  addStuff(x) {
    return this.state.a + x;
  }
};

// 调用正常返回 1+3=4
console.log(myObj.addStuff(3));

这种方式的好处是:不管myObj被赋值给哪个变量(比如const newObj = myObj),调用newObj.addStuff(3)时,this都会自动指向当前调用的对象,灵活性更高,不会像直接写myObj.state.a那样依赖固定的变量名。

2. 特殊场景下保留箭头函数的写法

如果因为某些特殊原因必须用箭头函数(比如需要捕获外层作用域的this),可以通过IIFE(立即执行函数)临时保存对象引用:

const myObj = (() => {
  const self = {
    state: { a: 1, b: 1 },
    addStuff: (x) => {
      return self.state.a + x;
    }
  };
  return self;
})();

console.log(myObj.addStuff(3)); // 同样返回4

不过这种写法没必要,普通函数方案已经足够简洁优雅,是日常开发的首选。

总结一下:对象方法优先用普通函数定义,利用this访问内部属性,这是JS中最规范且优雅的做法~

内容的提问来源于stack exchange,提问作者Rishav Sharan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:13:42