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

JavaScript遍历自定义类对象数组时调用成员函数报错求助

问题解决方法

1. 修正DataSet类的属性初始化错误

你当前类中属性的写法title = String是把title赋值为String构造函数本身,而非字符串类型的初始值,这会导致属性类型异常。正确的初始化应该给属性设置对应类型的默认值:

class DataSet{
  title = '' // 空字符串默认值
  description = ''
  attributes = []  

  constructor(title, description) {
    this.title = title
    this.description = description
  }
  setAttribute(a){this.attributes.push(a)}
}

2. 确保数组元素是DataSet实例

如果dataSets数组中的元素不是通过new DataSet(...)创建的实例,而是普通对象,那么自然没有setAttribute方法。创建实例时必须使用构造函数:

// 正确创建实例的方式
const dataSets = [
  new DataSet('标题1', '描述1'),
  new DataSet('标题2', '描述2')
];

3. 使用正确的数组遍历方式

for...in循环遍历的是数组的索引(字符串类型),而非数组元素本身,所以你之前的代码中data是索引字符串,调用data.setAttribute必然报错。推荐以下几种遍历方式:

方式一:for...of循环(直接遍历元素)

for (const data of dataSets) {
  data.setAttribute('attribute');
}

方式二:普通for循环(通过索引取元素)

for (let i = 0; i < dataSets.length; i++) {
  dataSets[i].setAttribute('attribute');
}

方式三:forEach方法

dataSets.forEach(data => {
  data.setAttribute('attribute');
});

验证实例类型

如果还是报错,可以先验证数组元素是否为DataSet实例:

console.log(dataSets[0] instanceof DataSet); // 应为true

如果返回false,说明该元素不是DataSet实例,需要检查创建元素的代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:52:08