链式多重赋值操作中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!是右结合的多重赋值,执行顺序是:
- 先执行右侧的
this.value = null!:触发setter,把m_sValue设为空字符串 - 这个赋值表达式的返回值是你赋的原始值
null!,而不是调用getter拿到的结果 - 最后把
null!直接赋值给ret,全程没触发getter
所以getValue2返回null——ret接的是原始的赋值内容,不是经过getter处理后的值。
记住:只有当你单独读取属性(比如let x = obj.prop)时,才会触发getter;赋值表达式本身只会返回你给的原始值,不会主动去调用getter拿结果。
内容的提问来源于stack exchange,提问作者tango.golf.romeo
相关产品推荐
相关产品推荐

