getter是微任务层与底层驱动间的可控闸门,通过状态翻译、毛刺屏蔽、数据脱敏、异步封装及私有字段约束,实现安全隔离与语义化访问。

Getter 访问器不是“取值工具”,而是微任务层与底层驱动之间的一道可控闸门。它不改变驱动行为,但能决定业务代码看到什么、何时看到、以什么形式看到——这才是安全隔离的本质。
把驱动信号翻译成稳定、可读的业务状态
底层驱动常返回瞬时、原始、带副作用的状态(如 isConnectedRaw、errorCodeNum),而微任务层需要的是语义明确、无抖动、可预测的判断依据:
- 将错误码转为业务态:
get status() { return this._err === 0 ? 'normal' : this._err === 1 ? 'recovering' : 'offline'; } - 合并多条件为单一语义:
get isOperational() { return this._powered && this._ready && !this._overheating; } - 屏蔽毛刺:在 getter 内缓存最近 150ms 的值,避免微任务因驱动信号跳变反复触发重试或告警
在读取出口做数据脱敏与权限裁剪
驱动可能暴露完整传感器帧、设备指纹或调试日志,但微任务层通常只需轻量、合规的数据片段:
- 返回冻结副本:
get sensorSnapshot() { return Object.freeze({ ts: Date.now(), temp: this._rawTemp }); },防止下游误改影响驱动内部状态 - 字段级遮蔽:
get deviceId() { return this._id?.slice(0, 4) + '****' + this._id?.slice(-4); } - 按执行上下文动态过滤:
get telemetry() { return this._inTestMode ? this._rawTelemetry : {}; }
封装异步就绪逻辑,让微任务“即用即得”
驱动加载有延迟,但微任务调度不能等。Getter 可隐藏初始化等待,提供确定性接口:
- 惰性加载配置:
get config() { return this._cfg || (this._cfg = this._fetchConfig()); } - 兜底默认值:
get battery() { return this._batLevel ?? 100; },避免微任务中处处判空 - 语义化异常:
get pressure() { if (!this._sensorCalibrated) throw new SensorUncalibratedError(); return this._rawPress; },比undefined更利于定位问题环节
配合私有字段与只读契约,堵死绕过路径
隔离有效性的前提是不可绕行。仅靠命名约定(如 _xxx)不够,必须用语言机制加固:
- 所有驱动字段声明为私有(
#rawData或this._rawData),不暴露原始访问入口 - 对外属性只提供 getter,不定义 setter,杜绝微任务反向写驱动状态
- 必要时结合
Object.freeze(this)或不可枚举描述符,防止运行时篡改 getter 定义











