问题描述
我正在开发一个完全没有意义的小游戏,通常称为“寻路”;并且我因一个从未遇到过的小错误而崩溃(我是年轻的开发人员);
我遇到此错误:
未捕获的TypeError:current.distance不是函数 在search_min_distance(pathfinding.js:127) 在游戏中(pathfinding.js:151) 在HTMLDocument。 (pathfinding.js:173)
This have been received:name: age:
-> current和stk [0]确实是“类型”点。
其余所有代码对我来说似乎并不重要,但如有必要,我会提供。
我先谢谢你!放纵...
解决方法
使用getElement函数得到的点仅返回 js对象,它不包含该类中的任何函数。
您需要从获取的点开始在search_min_distance函数内创建一个新的类实例
const { x,y,name,id } = current;
const currentPoint = new Point(x,id);
let min = currentPoint.distance(stk[0]);
我建议您编写一个util函数来计算两个点之间的距离,并将两个点作为参数传递。这将是一种更清洁的方法。
,在distance
内将this
函数绑定到constructor
class point {
constructor(x,id) {
this.x = x;
this.y = y;
this.part = document.createElement("div");
this.part.className = name;
this.part.id = id;
// bind distance method
this.distance = this.distance.bind(this);
}
distance(cmp) {
return Math.sqrt(Math.pow(cmp.x - this.x,2) + Math.pow(cmp.y - this.y,2));
}
}
,
错误的名称是“ TypeError”。那不仅是为了娱乐。 search_min_distance中可能存在的问题:
- stk未定义或其长度为0
- stk不是点数组(typeof point [])
- 点未定义或不是点(typeof点) 确定的问题:
- point.id未定义,仅在point.part 中
if (stk[i].id = current.id)
到
if (stk[i].part.id = current.part.id)
您的代码只是错误。
,最后,所有这些都是一个简单的疏忽大意。我将dom用作阵列,并在应该有相等的位置进行了分配。.谢谢大家。
if (stk[i].id = current.id)
为
if (stk[i].id == current.id)
和
var distId = search_min_distance(stk,cp[0]);
为
var distId = search_min_distance(stk,stk[cp[0].id]);