类型错误primeFactors.for不是函数

时间:2016-05-14 18:02:51

标签: javascript jasmine

当我尝试运行此代码时,我遇到了来自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;

2 个答案:

答案 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;