函数不会将参数视为对象数组

时间:2013-08-13 20:59:26

标签: javascript

我对一个函数的一个对象参数有一些麻烦。

真实代码:

function drawTable(x,y,numero,t,e) {

    context.fillStyle = "#ffff66";
    context.fillRect(x*146,y*146,55,55);


    var color;

    if (e[numero].tocado == "rojo") {
        color = "#cc3300"
    } else if (e[numero].tocado == "azul") {
        color = "#0099ff";
    } else {
        color = "#66ff66";
    }

    context.fillStyle = color;
    if (t==0 && x < 4) {
        context.fillRect((x*146)+55,(y*146)+9,91,39);
    }
    if (t==1){
        context.fillRect((x*146)+9,(y*146)+55,39,91);
    }

    if (x==4) {
        if (y<4) {
            if (t==1) {
                drawTable(0,y+1,numero+1,0,e);
            } else {
                drawTable(0,y,numero,1,e);
            }
        }
    } else {
        drawTable(x+1,y,numero+1,t,e);
    }
    return;     
}

socket.on("start", function (data) {
    game = data;
    drawTable(0,0,0,0,game.elements);
   //....
 }
"Data is a object:"
function Game() {
   this.turno = "";
   this.puntuacion_rojo = 0;
   this.puntuacion_azul = 0;
   this.elements = [];
}

"elements built"
 this.elements.push({
        id: 
        tipo: 
        tocado: ,
        left: 
        top: 
        width: 
        height:
        });

错误是:

  

未捕获的TypeError:无法读取未定义的属性'tocado'。

if (e[numero].tocado == "rojo") { 

数据不为空,我测试了它,它正确地从服务器返回。

2 个答案:

答案 0 :(得分:3)

  

所以,问题是“cosa”“认为”e不是一个对象数组

你错了。 cosa甚至没有被召唤过。抛出未捕获的异常时,线程停止。由于e未定义,因此您会在此行中获得例外:

e[0].hello = "hello!";

如果您想访问e[0]e应为数组:

var e = [];

如果您想访问e[0].helloe[0]应该是一个对象:

var e = [];
e[0] = {};
e[0].hello = "hello!":

或者所有这一行:

var e = [{hello: "hello!"}];

答案 1 :(得分:0)

听起来data.elements是一个空数组,所以e[0]返回undefined。也许你打算把那个this.elements.push(…)行放在Game函数中?