2016-05-14 3 views
0

У меня есть ошибка «TypeError: primeFactors.for не является функцией» от Jasmine, когда я пытаюсь запустить этот код, я столкнулся с таким типом ошибок, поэтому многие раз. Каков наилучший способ его решения? Я знаю, что ясно. Это не функция, но я не уверен, почему?Тип ошибки primeFactors.for не является функцией

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); 

Но это OK:

var obj = new primeFactors; 
obj.for(3); 

Для вашего теста Жасмин это сработает e это:

it('returns an empty array for 1', function() { 
    expect((new primeFactors).for(1)).toEqual([]); 
}); 
+0

it ('возвращает пустой массив для 1', function() { expect (primeFactors.for (1)). ToEqual ([]); }); если бы захотел пройти этот тест, как бы я его переформулировал. –

+0

Добавил это к моему ответу. – trincot

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; 
Смежные вопросы