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

无法访问基类getter:API加载FundDto后uniqueName为undefined

问题解决:API返回的子类实例无法访问基类getter属性

问题根源

Web API返回的JSON数据本质是普通JavaScript对象,并非FundDto的实例——它们没有继承ShortNameFullNameBaseDto的原型链,自然无法访问基类定义的uniqueName getter属性。而直接实例化FundDto并赋值时,对象是完整的类实例,原型链包含基类的getter,所以能正常工作。

解决方案

1. 将API返回的普通对象转换为FundDto实例

在获取API数据后,通过FundDto构造函数将每个普通对象转为类实例:

// 给FundDto添加支持传入数据的构造函数
class FundDto extends ShortNameFullNameBaseDto {
  shortName?: string;
  fullName?: string;
  // 子类其他属性...

  constructor(data?: Partial<FundDto>) {
    super();
    if (data) {
      // 将API返回的属性赋值到实例上
      Object.assign(this, data);
    }
  }
}

// 调用API并转换数据
async function loadFunds() {
  const response = await fetch('/api/funds');
  const rawFunds = await response.json();
  // 逐个转换为FundDto实例
  const funds = rawFunds.map(raw => new FundDto(raw));
  
  // 此时调用uniqueName即可正常获取值
  console.log(funds[0].uniqueName);
}

2. 确保基类getter正确访问实例属性

检查基类的uniqueName getter,确认它访问的是实例自身的shortName和fullName属性:

class ShortNameFullNameBaseDto {
  shortName?: string;
  fullName?: string;

  get uniqueName(): string {
    // 使用空值合并确保安全访问
    return this.shortName ?? this.fullName ?? '';
  }
}

3. 避免直接将JSON对象当作类实例使用

JSON解析后的对象没有类的原型方法、getter/setter,必须通过类构造函数实例化才能获得类的全部特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:58:16