当我尝试运行此代码时,我遇到了来自Jasmine的'TypeError:primeFactors.for is not function'错误,我已多次遇到此类错误。什么是解决它的最佳方法?我清楚地知道。因为这不是一个功能,但我不确定为什么?
var primeFactors = function(){};
primeFactors.prototype.for = function(num){
var array = [];
for(var i = 2; i < Math.ceil(Math.sqrt(num)); i++){
if(num % i === 0){
array.push(i);
num = num/i;
i--;
}
}
return array;
};
module.exports = primeFactors;
答案 0 :(得分:1)
如果要调用.for
,则必须为该原型创建一个对象实例,例如使用new
关键字:
这不行:
primeFactors.for(3);
但这没关系:
var obj = new primeFactors;
obj.for(3);
对于你的Jasmine测试,它会像这样工作:
it('returns an empty array for 1', function() {
expect((new primeFactors).for(1)).toEqual([]);
});
答案 1 :(得分:0)
如果正确编写了测试,您可以使用静态函数(内部类)来传递它们。 看一眼: https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Classes/static
"use strict";
class primeFactors {
static for(num) {
var array = [];
for(var i = 2; i < Math.ceil(Math.sqrt(num)); i++){
if(num % i === 0){
array.push(i);
num = num/i;
i--;
}
}
return array;
}
};
module.exports = primeFactors;