TypeError:a.dot(..).equals不是函数
TypeError: a.dot(...).equals is not a function
在下面的代码中,有3种方法:add、dot和equals。加法和点法计算两个向量的加法和点积。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);
dot
方法返回Number
,而不是Vector
。尝试使用==
而不是equals
。
Eric Galluzzo是正确的,但我想我应该给出更多的解释,因为我知道背景(对于感兴趣的读者来说,这来自Codewars练习:http://www.codewars.com/kata/vector-class/train/javascript)。
您编写方法的方式意味着a.dot(b).equals(11)
将比较Vector
对象的字符串表示和11
的字符串表示。这些显然是不相等的,因为您将比较类似'function Vector(vector) {...}'=='11'
的东西。
我认为你误解了equals
方法的目的。它是Vector
类only的对象之间相等性检查的具体实现。比较内置类型时,如果可能,应使用==
或===
。
上面链接的kata中的描述说"测试用例将使用用户提供的equals方法",但作者的意思是,在Vector
对象之间进行比较时,这只是。当比较dot
或norm
方法的结果时,使用相等运算符。
有关比较对象的更多信息,请参阅此SO问题。它还让您了解为什么比较整个对象的字符串表示并不总是一个好主意。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 将函数的上下文应用于javascript变量
- 如何在JavaScript中将字符串转换为函数引用
- 用嵌套函数和默认函数定义函数
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 无法导出函数expressjs/requestjs中的变量
- 函数参数中的数据与指定变量之间的任何性能差异
- JQuery合并了keyup和focusout两个函数
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 我可以在json对象中添加一个函数吗
- AngularJS:我可以跳过函数参数回调吗
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- jquery点击函数select&取消选择
- 拨打'父亲'函数形式a'儿童'ReactJS中的组件
- Node.js v6.2.0类扩展不是函数错误
- 比较从函数和生成的日期对象
- TypeError:a.dot(..).equals不是函数
- 类型错误:eem .value.equals不是一个函数