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

如何通过Lambda函数传递对象,让子类始终获取最新依赖引用?

解决方案:通过Lambda函数同步子类依赖引用

问题根源

你传递给子类的dep1是一个函数,而非直接的依赖实例。直接访问dep1.METHOD_REFERENCE会报错,因为函数本身没有这个属性;dep1.call()的用法也不对——lambda函数的this已经被词法绑定,直接调用即可。

修正后的实现步骤

1. 保留Manager类中的Lambda函数定义

你的Lambda写法是正确的,它会始终返回最新的_dep1Object引用:

private dep1 = (): Dep1 => {
  return this._dep1Object;
};

2. 给子类的依赖参数明确类型

在子类的构造函数或接收依赖的逻辑中,将依赖参数的类型定义为() => Dep1,避免TypeScript类型校验报错:

class ChildClass {
  constructor(private getDep1: () => Dep1) {}

  someBusinessMethod() {
    // 先调用函数获取最新实例,再访问目标方法
    const latestDep1 = this.getDep1();
    latestDep1.METHOD_REFERENCE();
  }
}

3. 子类中正确调用Lambda获取依赖

不要用dep1.call(),直接调用函数即可拿到最新实例:

// 错误写法
dep1.METHOD_REFERENCE;
dep1.call().METHOD_REFERENCE;

// 正确写法
dep1().METHOD_REFERENCE();

替代优化方案(可选)

如果觉得每次手动调用函数麻烦,可以封装一个代理对象,自动将属性/方法调用转发到最新的依赖实例:

private createDepProxy<T>(getInstance: () => T): T {
  return new Proxy({}, {
    get(_, prop) {
      return (getInstance() as any)[prop];
    }
  }) as T;
}

// 传递代理给子类
const dep1Proxy = this.createDepProxy(() => this._dep1Object);
const child = new ChildClass(dep1Proxy);

// 子类中可直接访问,无需手动调用函数
child.dep1.METHOD_REFERENCE();

这个方案的好处是子类代码无需修改,和直接使用依赖实例的写法完全一致,仅需注意代理带来的微小性能开销(常规业务场景可忽略)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:55:13