知识卡片
存取器属性把属性访问伪装成方法调用
内容
普通的数据属性只是存一个固定值,而存取器属性(getter/setter)用一对函数替代了这个值:读取属性时实际调用getter函数并把返回值当作属性值,赋值时则把右侧的值当参数传给setter函数去处理,属性本身并不真正存储数据。这让属性访问在语法上仍然是o.x这种简洁形式,内部却可以做任意计算——比如用两个真实存储的x、y坐标动态派生出只读的极坐标r和theta,或者在setter里做合法性校验后再决定是否真正修改内部状态。这个机制的价值在于对外暴露的接口(属性访问语法)和对内的实现(真实存储 vs 实时计算)完全解耦,调用方无需关心也无法区分自己读的到底是一份存好的数据还是一次即时运算的结果。
参考来源
《JavaScript权威指南(原书第6版)》第6章《对象》