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

编译无报错但控制台提示this.trackArray[0].points.getVector()不是函数求助

解决this.trackArray[0].points.getVector() is not a function报错问题

嘿,这个问题我之前排查过类似的,咱们一步步拆解解决:

核心问题分析

报错提示getVector()不是函数,本质上是**this.trackArray[0].points并不是你预期的、包含getVector方法的类实例**——它可能是undefined、普通对象,或者根本没正确挂载这个方法。

另外,你提供的getVector方法本身也有个潜在bug,咱们后面一起处理。

分步解决方案

1. 先确认points的真实状态

在调用getVector()前加几行调试代码,搞清楚points到底是什么:

console.log('当前points对象:', this.trackArray[0].points);
console.log('getVector方法是否存在:', typeof this.trackArray[0].points.getVector);

如果输出的getVector类型是"undefined",那说明points不是你定义的类实例,而是普通对象或者未初始化的值。

2. 检查trackArray的构建逻辑

你需要确保往trackArray里添加元素时,points属性是实例化了包含getVector方法的类,而不是直接创建普通对象。

举个反例(错误写法):

// 直接创建普通对象,没有挂载getVector方法
this.trackArray.push({ 
  points: { coordX: [1,2,3], coordY: [4,5,6], coordZ: [7,8,9] } 
});

正确的写法(假设你的类叫TrackPoints):

// 先定义包含getVector方法的类
class TrackPoints {
  coordX: number[];
  coordY: number[];
  coordZ: number[];

  constructor(x: number[], y: number[], z: number[]) {
    this.coordX = x;
    this.coordY = y;
    this.coordZ = z;
  }

  public getVector(): THREE.Vector3[] {
    const vecArray: THREE.Vector3[] = [];
    // 修正原代码的数组初始化问题:不能直接给未定义的vecArray[i]赋值
    for (let i = 0; i < this.coordX.length; i++) {
      vecArray.push(new THREE.Vector3(this.coordX[i], this.coordY[i], this.coordZ[i]));
    }
    return vecArray;
  }
}

// 实例化类后再加入trackArray
this.trackArray.push({ points: new TrackPoints(xArr, yArr, zArr) });

3. 修复getVector方法的内部bug

原代码里vecArray[i].x = ...会报错,因为vecArray初始化后是空数组,vecArray[i]是undefined,直接赋值属性会触发Cannot set property 'x' of undefined错误。改成上面代码里的push新Vector3实例的方式就可以解决。

最后验证

完成上面的调整后,再运行代码,getVector()应该能正常调用,同时也不会出现数组赋值的报错了。

内容的提问来源于stack exchange,提问作者Mohamed-Ali Elakhrass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:25:55