我有一个声明如下的tile对象:
var tile = {
x: 0,
y: 0,
w: canvas.width / numoftiles,
h: canvas.width / numoftiles,
color: "#FFFFFF"
};
我有一个多维数组来存储一些这些tile对象,我这样声明:
var tiles = [[]];
我循环浏览画布的长度,添加这些图块以填充屏幕,如下所示:
for (i = 0; i < (canvas.height / numoftiles); i++) {
for (j = 0; j < (canvas.width / numoftiles); j++) {
tiles[i][j] = new tile();
}
}
我的错误发生在该行:
tiles[i][j] = new tile();
JavaScript控制台返回“未捕获的TypeError:tile不是构造函数”
如何将tile对象插入多维数组中的特定位置?
答案 0 :(得分:1)
当你这样做时:
var tiles = [[]];
您只创建了tiles[0]
。要分配给tiles[i][j]
,tiles[i]
必须是一个数组,但除了i
之外的任何0
都不存在。您需要在循环中创建子数组。
至于你得到的错误,那是因为tile
只是一个对象,而不是构造函数。如果尚未定义构造函数,只需在循环中指定对象文字。
var tiles = [];
for (i = 0; i < (canvas.height / numoftiles); i++) {
tiles[i] = [];
for (j = 0; j < (canvas.width / numoftiles); j++) {
tiles[i][j] = {
x: 0,
y: 0,
w: canvas.width / numoftiles,
h: canvas.width / numoftiles,
color: "#FFFFFF"
};
}
}
答案 1 :(得分:1)
您需要定义一个对象构造函数,然后创建构造类型的对象:
function Tile() {
this.x = 0;
this.y = 0;
this.w = canvas.width / numoftiles;
this.h = canvas.width / numoftiles;
this.color = "#FFFFFF";
}
现在你可以使用:
var tile = new Tile();
答案 2 :(得分:0)
tile
是一个对象字面值,您不能在其上使用运算符new
。
new
运算符。