我对一个函数的一个对象参数有一些麻烦。
真实代码:
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") {
数据不为空,我测试了它,它正确地从服务器返回。
答案 0 :(得分:3)
你错了。所以,问题是“cosa”“认为”e不是一个对象数组
cosa
甚至没有被召唤过。抛出未捕获的异常时,线程停止。由于e
未定义,因此您会在此行中获得例外:
e[0].hello = "hello!";
如果您想访问e[0]
,e
应为数组:
var e = [];
如果您想访问e[0].hello
,e[0]
应该是一个对象:
var e = [];
e[0] = {};
e[0].hello = "hello!":
或者所有这一行:
var e = [{hello: "hello!"}];
答案 1 :(得分:0)
听起来data.elements
是一个空数组,所以e[0]
返回undefined。也许你打算把那个this.elements.push(…)
行放在Game函数中?