title: In Javascript, can you call a function of a class within another function of that same class?
body: <p>EDIT: I've included more detail in the getNeighbor function</p>
  
  <p>I know the following code is long, but I summarized as much as possible. I have the following code creating a hex map:</p>
  
  <pre><code>function Hex (col, row, ter) { //new class of Hexes with row, column, and terrain
    this.col = col;
    this.row = row;
    this.ter = ter; }
  
  function Map (num_col, num_row) { //create a map of Hexes of dimension num_col x num_row
      this.num_col = num_col;
      this.num_row = num_row;
      this.hexArray = new Array();
      for (i=0; i&lt;num_col; i++) {            //creates a 2D array of Hexes with "blank" terrain
          this.hexArray[i] = new Array();
          for (j=0; j&lt;num_row; j++) {
              this.hexArray[i][j] = new Hex(i, j, "blank"); }}
  
      this.step1 = function() { 
      //assigns a terrain value to 30% of the hexes in the map ("seeds" the map) and returns an array called step1Array whose values are the seeded Hexes.
  
      this.getNeighbor = function(hex) { //returns all the neighbors of the given hex in an array called neighborArray 
          var delta = [[1, -1, 0], [1, 0, -1], [0, 1, -1],
                   [-1, 1, 0], [-1, 0, 1], [0, -1, 1]];
          this.neighborArray = new Array();
  
          for (i=0; i&lt;delta.length; i++) {
              //get the coordinates of the neighbors and store them as newCol and newRow
              if (newCol&lt;0 || newRow&lt;0 || newCol&gt;this.num_col-1 || newRow&gt;this.num_row-1  //skip any hexes that are out of bounds
                  || this.hexArray[newCol][newRow].ter !== "blank") continue;             //or that are already seeded
              this.neighborArray.push(this.hexArray[newCol][newRow]); }
  
      return this.neighborArray;
  }
  
      this.step2 = function() { //assigns a terrain value to all "blank" neighbors of the seeded hexes
          for (i=0; i&lt;this.step1Array.length; i++) {
              this.getNeighbor(this.step1Array[i]);
              if (this.neighborArray.length === 0) continue;  //if there are no "blank" neighbors, continue to the next seeded Hex
              else {
                  for (j=0; j&lt;this.neighborArray.length; j++) {    //else assign each blank neighbor a terrain value
                          var percent = Math.random();
                          var temp_col = this.neighborArray[i].col;
                          var temp_row = this.neighborArray[i].row;
                  //based on the value of "percent", assign this.hexArray[temp_col][temp_row].ter a given value
                   }
              }
          }
     }
  
  var testMap = new Map(3,3) //create a 3x3 map of hexes
  testMap.step1();           //seed the map
  testMap.step2();           //assign terrain values to neighbors of seeded hexes. get error.
  </code></pre>
  
  <p>My problem is that I get the following error when compiling: 
  Uncaught TypeError: Cannot read property 'col' of undefined</p>
  
  <p>I've experimented a lot with the step1 and getNeighbor functions, and they return accurate arrays of Hexes, so I don't think those are the problem.</p>
  
  <p>I can't figure out what the problem is. Is there a problem with calling the getNeighbor function within the step2 function? for some reason it doesn't like</p>
  
  <pre><code>var temp_col = this.neighborArray[i].col;
  </code></pre>