Javascript TypeError:a.dot(…).equals不是函数
在下面的代码中,有3种方法:add、dot和equals。加法和点法计算两个向量的加法和点积。equals方法检查add和dot方法的返回值是否与传递给equals方法的参数匹配 我得到了错误Javascript TypeError:a.dot(…).equals不是函数,javascript,class,methods,prototype,typeerror,Javascript,Class,Methods,Prototype,Typeerror,在下面的代码中,有3种方法:add、dot和equals。加法和点法计算两个向量的加法和点积。equals方法检查add和dot方法的返回值是否与传递给equals方法的参数匹配 我得到了错误TypeError:a.dot(…).equals不是一个函数,如果我试图调用dot方法上的equals方法。我做错了什么?我怎样才能让它工作?在add方法上调用equals方法时没有错误 function Vector(vector){ this.vector=vector; }
TypeError:a.dot(…).equals不是一个函数
,如果我试图调用dot方法上的equals方法。我做错了什么?我怎样才能让它工作?在add方法上调用equals方法时没有错误
function Vector(vector){
this.vector=vector;
}
//add method
Vector.prototype.add= function(b){
var res=[];
var vec1 =this["vector"];
var vec2 = b["vector"];
for (i=0; i<vec1.length; i++){
res.push(vec1[i]+vec2[i]);
}
var result = new Vector(res);
return result;
};
//dot product method
Vector.prototype.dot= function(b){
var res=0;
var vec1 =this["vector"];
var vec2 = b["vector"];
for (i=0; i<vec1.length; i++){
res+=vec1[i]*vec2[i];
}
return res;
};
//equals method
Vector.prototype.equals = function(answer){
if (this.toString()===answer.toString()){
return true;
} else {
console.log(this);
return false;
}
};
//test
var a = new Vector([1,2]);
var b = new Vector([3,4]);
a.add(b).equals(new Vector([4,6]));
a.dot(b).equals(11);
函数向量(向量){
这个向量=向量;
}
//添加方法
Vector.prototype.add=函数(b){
var-res=[];
var vec1=该[“向量”];
var vec2=b[“向量”];
对于(i=0;i,点
方法返回一个数字
,而不是向量
。尝试使用=
而不是等于
,Eric Galluzzo是正确的,但我想我应该给出更多的解释,因为我知道背景(对于感兴趣的读者来说,这来自一个Codewars练习:)
您编写该方法的方式意味着a.dot(b).equals(11)
将比较Vector
对象的字符串表示形式与11
的字符串表示形式。这显然是不相等的,因为您将比较类似于的函数向量(Vector){…}='11'
我认为您误解了equals
方法的目的。它只是Vector
类的对象之间的等式检查的具体实现。在比较内置类型时,如果可能,您应该使用=
或==
上面链接的kata中的描述说“测试用例将使用用户提供的equals方法”,但作者仅在比较向量
对象时表示这一点。在比较点
或标准
方法的结果时,使用相等运算符
有关比较对象的更多信息,请参阅。它还让您了解为什么比较整个对象的字符串表示并不总是一个好主意。我没有意识到equals方法只能用于加法和减法。谢谢大家