在Javascript中,你可以在同一个类的另一个函数中调用类的函数吗?

时间:2014-11-27 17:21:23

标签: javascript function uncaught-typeerror

编辑:我在getNeighbor函数

中包含了更多细节

我知道以下代码很长,但我尽可能地总结。我有以下代码创建一个十六进制映射:

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<num_col; i++) {            //creates a 2D array of Hexes with "blank" terrain
        this.hexArray[i] = new Array();
        for (j=0; j<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<delta.length; i++) {
            //get the coordinates of the neighbors and store them as newCol and newRow
            if (newCol<0 || newRow<0 || newCol>this.num_col-1 || newRow>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<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<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.

我的问题是编译时遇到以下错误: 未捕获的TypeError:无法读取属性&#39; col&#39;未定义的

我已经使用step1和getNeighbor函数进行了大量实验,并且它们返回了准确的Hexes数组,所以我不认为这些是问题。

我无法弄清问题是什么。在step2函数中调用getNeighbor函数有问题吗?出于某种原因,它不喜欢

var temp_col = this.neighborArray[i].col;

1 个答案:

答案 0 :(得分:1)

你可能认为你的“这个”并不是你认为的“这个”,因为你处于内在的功能中。

你可以尝试:

var _this = this;  //Create a local variable containing this
this.step2 = function() { //assigns a terrain value to all "blank" neighbors of the seeded hexes
    for (i=0; i<this.step1Array.length; i++) {
        _this.getNeighbor(this.step1Array[i]);  //use _this instead of this
        if (_this.neighborArray.length === 0) continue;