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

TS/JS/Node中抽象类公共属性透明观察实现方案咨询

内置可观察能力的抽象基类实现方案问题

我需要实现一个基础抽象类,为所有公共属性内置可观察能力:若属性为对象、数组等引用类型,还需感知其内部值变更。该基类需要适配多种接口与自定义扩展属性,使用该基类的开发者无需额外处理事件、发布订阅或其他通知逻辑,相关能力全部由基类内置。

初始基类结构如下:

abstract class BaseClass {
    #stores: Map<any, Function[]>

    subscribe(prop: NonFunctionPropertyNames<this>, callback: (data: CallbackType)=>void){
        // 处理订阅逻辑
    }

    unsubscribe(prop: NonFunctionPropertyNames<this>, callback: (data: CallbackType)=>void){
       // 处理取消订阅逻辑
    }

    constructor(){
        this.#stores = new Map<any, Function[]>()
    }
}

已验证的两种实现方案对比

我已经尝试过Proxy和get/set两种实现方案,二者各有优劣:

Proxy 方案

  • 优势
    • 可拦截代理类实例上的所有操作,包括引用类型属性的内部变更
  • 缺陷
    • 无法正确代理私有字段,任何引用私有字段的方法运行时都会触发程序报错

get/set 拦截方案

  • 优势
    • 无需克隆实例方法,可完美兼容类的私有字段
  • 缺陷
    • 仅能拦截属性的直接赋值操作,无法感知属性值内部的变更

我目前可暂时接受get/set方案,但该方案要求基类使用者修改引用类型属性的内部值后,必须重新对属性赋值才能触发变更通知,现咨询是否存在其他未考虑到的更优实现方案。

补充业务背景

实际的业务实现类属于框架内的第二方代码,我不一定会亲自实现所有类,但这些类都属于同一IoT设备管理框架的组成部分。我的设计思路是提供BaseClass基础能力与通用接口来约束业务实现类,让特定IoT设备的底层细节逻辑仅封装在对应类中,最终目标是将IoT设备的底层实现细节与应用层的设备调用逻辑完全解耦。


内容的提问来源于stack exchange,提问作者pure_bordem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:30:45