构造函数仅初始化实例独有状态字段,通用方法统一挂载原型链实现复用;通过object.create委托配置化派生;敏感外部状态用weakmap隔离管理。

直接用构造函数 + 原型链就能实现轻量级对象状态管理,关键不是堆功能,而是控制状态归属和方法复用。
构造函数只管初始化专属数据
每个实例只需保存自己独有的状态字段,比如 id、当前状态值、配置项等。业务逻辑和通用方法一律不放在这里,避免重复创建函数对象。
- ✅ 正确做法:构造函数里只写
this.id = id、this.state = 'init' - ❌ 错误做法:在构造函数里定义
this.reset = function(){...}或绑定事件处理器
通用行为统一挂到 prototype 上
所有实例共享的方法(如 setState、getState、on、emit)都定义在原型上。这样无论创建 10 个还是 1000 个实例,这些方法只存在一份内存中。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 例如:
StateStore.prototype.setState = function(next) { this.state = next; this.notify(); } - 调用时走原型链查找,不产生闭包、不捕获外部变量,运行时干净可控
用 Object.create 实现配置化派生
当需要多个行为一致但参数不同的状态管理器(比如不同超时时间的请求控制器),不用新建类,直接用 Object.create 委托基础对象即可。
- 定义基础模板:
const baseConfig = { timeout: 5000, retry: 2, setState() { ... } }; - 派生变体:
const fastApi = Object.create(baseConfig); fastApi.timeout = 800; - 调用
fastApi.setState()会自动沿原型链找到 baseConfig 上的方法
外部状态用 WeakMap 隔离管理
真正需要持久、且不能挂在实例上的数据(比如 token、用户权限、订阅列表),用 WeakMap 关联,既保证私密性,又不阻碍垃圾回收。
const privateData = new WeakMap();- 在方法中通过
privateData.get(this)获取,privateData.set(this, {...})存储 - 避免把敏感信息塞进
this导致意外暴露或被序列化










