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
相关产品推荐
相关产品推荐

