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

带Getter的Property_1是否持有Property_2的值或引用?对象场景解析

好问题!咱们一步步把这几个点拆解明白:

1. Property_1是否持有Property_2的副本?

完全不会。Getter属性的本质是一个被自动执行的函数,它本身并不存储任何值。每次你访问Property_1的时候,都会触发Getter函数的执行,函数里的逻辑是去读取Property_2的当前值然后返回——相当于每次都是“实时调取”,不会把Property_2的值存在Property_1里留副本。

举个JavaScript的例子直观感受下:

const myObj = {
  // 用下划线标识内部存储的Property_2值
  _property2: 5,
  // Property_2的Getter/Setter(如果需要的话)
  get property2() {
    return this._property2;
  },
  set property2(newVal) {
    this._property2 = newVal;
  },
  // Property_1的Getter,依赖Property_2
  get property1() {
    console.log("Property_1的Getter正在执行!");
    return this.property2;
  }
};

console.log(myObj.property1); // 先打印日志,再输出5
myObj.property2 = 15;
console.log(myObj.property1); // 再次打印日志,输出15

你看,每次访问property1都会触发日志打印,说明Getter每次都在执行,而且返回的是property2的最新值,根本没有存副本。

2. 当Property_2是对象引用时,Property_1拿到的是独立引用吗?

不是。这里要搞清楚:对象在内存里是一个实体,变量(或属性)存的只是指向这个实体的引用地址。当Getter返回Property_2的引用时,它返回的是同一个地址——也就是说,Property_1拿到的引用和Property_2的引用指向的是同一个对象,并不是独立的副本。

还是用代码举例:

const myObj = {
  _property2: { age: 25 },
  get property2() {
    return this._property2;
  },
  get property1() {
    return this.property2;
  }
};

// 从Property_1拿到对象引用
const objFromProp1 = myObj.property1;
// 修改这个对象的属性
objFromProp1.age = 30;

// 查看Property_2对应的对象
console.log(myObj.property2.age); // 输出30!

这就证明了,Property_1和Property_2的引用指向同一个对象,修改其中一个,另一个也会看到变化。如果是独立引用的话,修改objFromProp1的属性不会影响myObj.property2的对象。

总结一下
  • Getter属性本身不存储任何值,每次访问都会执行Getter逻辑,实时获取Property_2的当前值,无副本。
  • 当Property_2是对象时,Property_1返回的是同一个对象的引用,并非独立引用,操作对象会影响两边。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:15:25