在下面的代码中,有3种方法:add,dot和equals。 add和dot方法计算两个向量的加法和点积。 equals方法检查add和dot方法的返回值是否与传递给equals方法的参数匹配。
如果我尝试在dot方法上调用equals方法,我收到错误TypeError: a.dot(...).equals is not a function
。我做错了什么,我怎么能让它发挥作用?在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);
答案 0 :(得分:1)
dot
方法返回Number
,而不是Vector
。尝试使用==
代替equals
。
答案 1 :(得分:0)
编写方法的方式意味着a.dot(b).equals(11)
会将Vector
对象的字符串表示与11
的字符串表示进行比较。这些显然不相等,因为您将比较'function Vector(vector) {...}'=='11'
。
我认为你误解了equals
方法的目的。它是Vector
类仅的对象之间的相等性检查的特定实现。比较内置类型时,如果可能,请使用==
或===
。
上面链接的kata中的描述说“测试用例将使用用户提供的equals方法”,但是在Vector
个对象之间进行比较时,作者仅指 。比较dot
或norm
方法的结果时,使用相等运算符。
有关比较对象的更多信息,请参阅http://www.codewars.com/kata/vector-class/train/javascript。它还让您了解为什么比较整个对象的字符串表示并不总是一个好主意。