2016-05-13 22 views
-1

Gamei erstellt die folgende "Klasse":Übergeben eines Objekts zur Funktion. JavaScript

function State(){ 
    this.board = []; 
    for (i=0; i< 9; i++){ 
     var row = []; 
     for (j=0; j< 9; j++){ 
     row.push(0); 
     } 
     this.board.push(row); 
    } 
} 

es eine Methode hat nextEmptyCell genannt:

State.prototype.nextEmptyCell = function(){ 
    ... 
} 

Ich habe eine Instanz dieser Klasse und übergeben sie an eine andere Funktion.

game = new State(); 
function solveSudoku(game){ 
    var next = game.nextEmptyCell(); 
    ... 
} 

Auf der folgenden Zeile: var next = game.nextEmptyCell(); Ich erhalte eine Fehlermeldung, dass:

"Uncaught TypeError: Cannot read property 'nextEmptyCell' of undefined".

Ich verstehe nicht, warum ‚Spiel‘ nicht definiert und wie ist diese Fehler zu beheben. Link zum vollständigen Code: jsfiddle.net/py6kv7ps/5

P.S. Gibt es eine bessere Möglichkeit, JS als OOP zu verwenden?

+2

Ist das denn sein 'var next = game.nextEmptyCell();'? (I.e. 'game' statt' state'.) –

+0

Ja, tut mir leid. Ich habe beim Schreiben der Frage einen Fehler gemacht. Es sollte game.nextEmptyCell() sein. Das ist jedoch nicht das Problem. – Yhlas

+0

@Yhlas Das nächste Mal übergeben Sie Ihren Code in jsfiddle, genau hier. – 7urkm3n

Antwort

1

Ausgabe von solveSudoku() kommt, werden Sie es rekursiv aufrufen, ohne ein Argument übergeben. Deshalb bekommen Sie Fehler.

"Uncaught TypeError: Cannot read property 'nextEmptyCell' of undefined".

function solveSudoku(game) { 
     if (solveSudoku(ADD game OBJECT HERE)) { 
     return game; 
     } 
} 
+0

Danke Freund! – Yhlas

0

Sie wahrscheinlich gemeint game.nextEmptyCell(), nicht state.nextEmptyCell(). Es gibt keine Variable mit dem Namen state irgendwo in dem Code, den Sie gepostet haben.

0

Das ist, weil Ihr Parameter game die glbal Variable game mit dem gleichen Namen schattiert. Die globale Variable game = new State(); hat den korrekten Wert. So können Sie es zu Ihrem Methodenaufruf übergeben Sie den richtigen Wert des Spiels innerhalb der Methode verwenden solveSudoku()

function State(){ 
 
    this.board = []; 
 
    
 
    for (i=0; i< 9; i++){ 
 
     var row = []; 
 
     for (j=0; j< 9; j++){ 
 
     row.push(0); 
 
     } 
 
     this.board.push(row); 
 
    } 
 
} 
 

 
State.prototype.nextEmptyCell = function(){ 
 
    console.log('egvse gtrs'); 
 
    document.write('egvse gtrs'); 
 
}; 
 

 
var game = new State(); 
 
function solveSudoku(game){ 
 
    var next = game.nextEmptyCell(); 
 
} 
 

 
solveSudoku(game);

+0

Dieser Code funktioniert eindeutig. Aber wenn ich genau dasselbe auf meinem vollständigen Code mache, gibt es mir immer noch den gleichen Fehler wie zuvor. – Yhlas

+0

Wie rufen Sie die Methode in Ihrem Code auf? –

+0

https://jsfiddle.net/py6kv7ps/5/ – Yhlas

Verwandte Themen