getter的核心作用是构建微任务与驱动的安全隔离层,通过控制读取时机、方式和内容,将底层原始信号转为稳定语义状态,封装异步就绪逻辑,并配合私有字段与只读契约杜绝绕过。

用 Getter 访问器建立微任务层与底层驱动的安全隔离带,关键不在“取值”,而在于**控制读取的时机、方式和内容**。它让微任务逻辑只看到稳定、语义清晰、无副作用的业务接口,完全不感知驱动初始化状态、硬件抖动、原始错误码或未就绪数据。
把驱动信号转为微任务友好的语义状态
底层驱动常暴露瞬时、低阶字段(如 isConnectedRaw、errorCodeNum、_sensorDirty),但微任务只需响应“设备是否可用”“数据是否可信”“是否允许触发后续流程”。Getter 正好承担翻译职责:
- 将数值错误码映射为可参与调度的状态:get status() { return this._errorCode === 0 ? 'ready' : 'pending'; }
- 合并多个驱动信号为单一调度门控:get canSchedule() { return this._isPowered && this._firmwareLoaded && !this._isBusy; }
- 屏蔽毫秒级抖动:在 getter 中缓存最近 150ms 内的有效值,避免微任务被频繁的 on/off 跳变反复唤醒
对原始数据做微任务安全封装
驱动返回的数据可能含未校验传感器值、完整日志、设备指纹等,直接流入微任务链易引发误判或泄露。Getter 在出口处统一拦截:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 返回不可变副本,防止微任务中途篡改影响驱动状态:get sensorSnapshot() { return Object.freeze({ ...this._rawData }); }
- 字段级脱敏,隐藏敏感标识:get deviceId() { return this._deviceId?.slice(0, 4) + '****' + this._deviceId?.slice(-4); }
- 按调度上下文裁剪:例如仅在定时微任务中返回基础指标,在告警微任务中才补充诊断字段
封装异步就绪检查,避免微任务空转或崩溃
驱动加载有延迟,微任务可能在 driver.init() 完成前就被调度。Getter 可隐藏等待逻辑,提供“即调即用”的确定性接口:
- 惰性加载配置,首次访问才触发初始化:get config() { if (!this._cachedConfig) this._cachedConfig = this._loadConfigAsync(); return this._cachedConfig; }
- 兜底默认值,消除空值判断负担:get batteryLevel() { return this._rawBattery ?? 25; }
- 抛出可捕获的语义错误:get temperature() { if (!this._sensorReady) throw new SensorNotAvailableError(); return this._rawTemp; },比 undefined 或 NaN 更利于微任务流的错误分支处理
配合私有字段与只读契约,堵住绕过路径
隔离有效的前提是“不可绕过”。仅靠命名约定(如 _xxx)无法阻止微任务层直接读取原始字段。必须:
- 将真实状态存在私有字段(#rawState 或 _state)中
- 所有对外暴露的属性均通过 getter 封装,且不提供对应 setter
- 在 TypeScript 中标注为 readonly,或在 JS 中通过 Object.defineProperty 明确设为 enumerable: false, writable: false










