2016-05-14 8 views
0

Ich habe eine 'TypeError: primeFactors.for ist keine Funktion' Fehler von Jasmine, wenn ich versuche, diesen Code auszuführen, habe ich in diese Art von Fehler so viele gerannt mal. Was ist der beste Weg, um es zu lösen? Ich weiß das klar. Für ist keine Funktion, aber ich bin mir nicht sicher warum?Typ Fehler primeFactors.for ist keine Funktion

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

Es gibt keine Linie o Jasmine Testcode, warum den Tag [tag: Jasmin]? –

Antwort

1

Wenn Sie .for anrufen möchten, müssen Sie eine Objektinstanz für diesen Prototyp, zum Beispiel mit dem new Stichwort erstellen:

Das ist nicht in Ordnung ist:

primeFactors.for(3); 

Aber das ist OK:

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

Für Ihren Jasmine-Test würde es like funktionieren e dies:

+0

it ('liefert ein leeres Array für 1', Funktion() { expect (primeFactors.for (1)). ToEqual ([]); }); Wenn es gewünscht wird, um diesen Test zu bestehen, wie würde ich es neu formulieren –

+0

Hinzugefügt, dass meine Antwort. – trincot

0

Wenn die Tests korrekt geschrieben sind, können Sie statische Funktionen (innerhalb von Klassen) verwenden, um sie zu übergeben. Werfen Sie einen Blick auf: 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; 
Verwandte Themen