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

如何在对象嵌套getter属性中访问父级属性值(非类实现)

不使用类实现嵌套getter访问外层对象属性

问题原因

你遇到的错误是因为getter函数中的this指向的是obj.propTwo而非外层的obj,所以this.propOne为undefined,自然无法读取url属性。以下是几种不使用类的解决方法:


方法1:直接引用外层对象变量

最简单的方式是在getter中直接使用定义好的obj变量访问外层属性:

let obj = {
  propOne: {
    url: 'https://www.google.com'
  },
  propTwo: {
    get propTwoNested(){
      return `SITE URL: ${obj.propOne.url}`
    }
  },
}

console.log(obj.propTwo.propTwoNested); // 输出 "SITE URL: https://www.google.com"

这种方式利用闭包特性,getter函数可以访问到外部作用域的obj变量,直接获取外层属性。


方法2:用立即执行函数捕获外层上下文

如果不想直接依赖全局的obj变量,可以通过立即执行函数(IIFE)创建一个封闭作用域,保存外层对象的引用:

let obj = (() => {
  const outerObj = {
    propOne: {
      url: 'https://www.google.com'
    }
  };
  
  outerObj.propTwo = {
    get propTwoNested(){
      return `SITE URL: ${outerObj.propOne.url}`
    }
  };
  
  return outerObj;
})();

console.log(obj.propTwo.propTwoNested); // 输出 "SITE URL: https://www.google.com"

这里outerObj只在IIFE内部可见,避免了全局变量的直接引用,同时保证getter能稳定访问外层对象。


方法3:将getter绑定到外层对象

可以通过Function.prototype.bind()把getter的this绑定到外层的obj,需要先定义obj的基础结构,再添加getter:

let obj = {
  propOne: {
    url: 'https://www.google.com'
  },
  propTwo: {}
};

// 定义getter并绑定this到obj
Object.defineProperty(obj.propTwo, 'propTwoNested', {
  get: function() {
    return `SITE URL: ${this.propOne.url}`
  }.bind(obj)
});

console.log(obj.propTwo.propTwoNested); // 输出 "SITE URL: https://www.google.com"

通过bind()强制将getter的this指向外层的obj,这样就能正确访问propOne属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:33:30