编译无报错但控制台提示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
相关产品推荐
相关产品推荐

