2016-06-11 16 views
0

Ich schreibe ein kleines Schlachtschiffspiel, und ich überarbeite meinen Code mit Javascript-Objekten, ein Werkzeug, mit dem ich nicht sehr vertraut bin. Ich möchte in der Lage sein, eine Funktion innerhalb einer Funktion mit Objekten aufzurufen, und ich kann nicht herausfinden, wie das geht. Der Code ist hier:Funktionen aus den Funktionen aufrufen JS

<script> 
var xPos; 
var yPos; 
var boatGrid = { 

    selectPos : function() { 
     console.log("it works"); //want to try calling function addNumber() here 
     for (boatNum = 1; boatNum < 4; boatNum++) { 
      xPos = Math.floor(Math.random() * 8); 
      yPos = Math.floor(Math.random() * 10 + 1); 
     } 
    }, 
    buildBoat : function() { 
     console.log("this works too"); 
     for (boatLen = 1; boatLen < 4; boatLen++) { 
      xPos = xPos++; 
      boatPos = "cell_" + xPos + "_" + yPos; 
     } 
    }, 
    addNumber : function() { 
     document.getElementById("test2").innerHTML = "hello"; //debug line 
    } 
} 

Die addNum() -Funktion ist es als Debug.

+0

ich es nicht bekommen kann. Meinst du eine 'boatGrid.addNumber()' aufrufen? – Chay22

Antwort

0

Sie sind fast da. In Ihrem Fall boatGrid ist ein Objekt und addNumber ist eine der Methoden. so verwenden this.addNumber()

var xPos; 
var yPos; 
var boatGrid = { 

    selectPos : function() { 
     console.log("it works"); //want to try calling function addNumber() here 
    this.addNumber(); // Changed here 
    for (boatNum = 1; boatNum < 4; boatNum++) { 
      xPos = Math.floor(Math.random() * 8); 
      yPos = Math.floor(Math.random() * 10 + 1); 
     } 
    }, 
    buildBoat : function() { 
     console.log("this works too"); 
     for (boatLen = 1; boatLen < 4; boatLen++) { 
      xPos = xPos++; 
      boatPos = "cell_" + xPos + "_" + yPos; 
     } 
    }, 
    addNumber : function() { 
     //document.getElementById("test2").innerHTML = "hello"; //debug line 
    document.write('<pre>Add Number called</pre>') 

    } 
} 
boatGrid.selectPos(); 

jsfiddle

0

Wenn Sie boatGrid.selectPos() anrufen und die addNumber Funktion innerhalb der selectPos Funktion aufrufen, fügen Sie einfach this.addNumber(); innerhalb der selectPos Funktion.

selectPos : function() { 
     console.log("it works"); 
     this.addNumber(); // <---- boatGrid calls addNumber() 
     for (boatNum = 1; boatNum < 4; boatNum++) { 
      xPos = Math.floor(Math.random() * 8); 
      yPos = Math.floor(Math.random() * 10 + 1); 
     } 
    } 

Wenn innerhalb einer Objektfunktion verwendet wird, bezieht sich auf das Objekt this Aufruf der Funktion.

So mit meinem ursprünglichen Beispiel zu gehen, boatGrid Anrufe selectPos, so this innerhalb der selectPos Funktion bezieht sich auf boatGrid.

Also dann this.addNumber() haben, dass boatGrid Objekt seine addNumber Funktion aufrufen.

0

Verwenden

this.addNumber(); 

Der Code sollte wie folgt aussehen

selectPos : function() { 
    console.log("it works"); 
    this.addNumber(); //want to try calling function addNumber() here 
    for (boatNum = 1; boatNum < 4; boatNum++) { 
     xPos = Math.floor(Math.random() * 8); 
     yPos = Math.floor(Math.random() * 10 + 1); 
    } 
}, 
Verwandte Themen