“无法设置undefined属性”,即使数组已经初始化

时间:2016-12-29 09:43:20

标签: javascript arrays multidimensional-array

我想创建一个2D对象数组,然后设置一个元素属性的值。

var maze=new Maze(3);
maze.resetField();

function Maze(size){
    this.size=size;
    this.xPos=0;
    this.yPos=0;
    this.field=[];
    this.resetField=function(){
        this.field=[];
        this.xPos=0;
        this.yPos=0;
        var row;
        var newWord;
        var newPlace;
        for(rowCtr=0;rowCtr<this.size;rowCtr++){
            row=[];
            for(r=0;r<this.size;r++){
                newWord="rowCtr"+rowCtr+"r"+r;
                newPlace=Place(newWord);
                row[r]=newPlace;
            }
            this.field.push(row);
        }
        treasureX=1;
        treasureY=1;
        this.field[treasureY][treasureX].word="treasure";
    }

}

function Place(word){
    this.word=word;
    this.walls=[];
    this.addWall=function(route){
        this.walls.add(route);
    }
}

代码到达此行时:

this.field[treasureY][treasureX].word="treasure";

我收到此错误:

Uncaught TypeError: Cannot set property 'word' of undefined

但是,由于我已经使用嵌套的for循环初始化了所有数组元素,因此this.field[treasureY][treasureX]的{​​{1}}实例不应该被定义为Place吗?

2 个答案:

答案 0 :(得分:3)

我建议将new用于<!DOCTYPE html> <html> <body> <style> input{ border:3px solid red; width:10px; } </style> <h3>A demonstration of how to access a File Upload Button</h3> <input type="file" id="myFile"> </body> </html>的新实例。

Place

答案 1 :(得分:1)

您必须替换:

newPlace=Place(newWord);

通过

newPlace=new Place(newWord);

如果您不使用new关键字,变量newPlace将设置为未定义,因此所有数组元素都将是未定义的。