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

链式多重赋值操作中Getter未被调用的原因排查

为什么多重赋值a = b = c里,setter正常执行但getter没触发?

看你贴的代码,问题出在JavaScript/TypeScript的赋值运算规则上,直接拆解核心逻辑:

在getValue1里,你是分开写的两步:

this.value = null!;
ret = this.value;

第一步调用value的setter(把null转成空字符串),第二步单独读取this.value,这时候才会触发getter,拿到处理后的空字符串,所以返回结果符合预期。

但getValue2里的ret = this.value = null!是右结合的多重赋值,执行顺序是:

  1. 先执行右侧的this.value = null!:触发setter,把m_sValue设为空字符串
  2. 这个赋值表达式的返回值是你赋的原始值null!,而不是调用getter拿到的结果
  3. 最后把null!直接赋值给ret,全程没触发getter

所以getValue2返回null——ret接的是原始的赋值内容,不是经过getter处理后的值。

记住:只有当你单独读取属性(比如let x = obj.prop)时,才会触发getter;赋值表达式本身只会返回你给的原始值,不会主动去调用getter拿结果。

内容的提问来源于stack exchange,提问作者tango.golf.romeo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:59