我在网上找到的循环对象创建示例使用new关键字,我想使用Object.create()。
我的尝试在第29行返回错误: https://jsfiddle.net/ynfkev6c/2/
function my_game() {
var cols = 11;
var rows = 11;
var num = cols * rows;
var size = 50;
var spacing = 5;
var square = {
size: 50,
x: 0,
y: 0
}
var piece = {
size: 50,
x: 0,
y: 0,
name: king
}
function make_grid() {
var squares = [];
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
squares.push({ // ??
Object.create(square); // ??
x: i; // ??
y: j; // ??
})
}
}
}
}
如果你是我,你会怎么找到这个答案?
答案 0 :(得分:2)
您不能在对象文字中使用Object.create
。你需要写
function make_grid() {
var squares = [];
for (var i = 0; i < rows; i++) {
for (var j = 0; j < cols; j++) {
var o = Object.create(square);
o.x = i;
o.y = j;
squares.push(o);
}
}
return squares;
}
或者如果您需要一个没有临时变量的更简洁的解决方案,
squares.push(Object.assign(Object.create(square), {
x: i,
y: j,
}));
答案 1 :(得分:1)
改变你的内循环:
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
let sq = Object.create(square)
sq.x = i
sq.y = j
squares.push(sq)
}
}
答案 2 :(得分:1)
我可以通过传入i
和j
参数来使用函数创建对象,然后将其推送到数组:
function createSquare(x, y) {
return { size: 50, x, y }
}
...
for (j = 0; j < cols; j++) {
squares.push(createSquare(i, j));
}
答案 3 :(得分:0)
创建对象,然后设置或指定属性:
var obj = Object.create(square);
squares.push(Object.assign(obj, {x: i, y: j }));
或设置属性:
var obj = Object.create(square);
obj.x = i;
obj.y = j;
squares.push(obj);
答案 4 :(得分:0)
首先,在squares.push
中,您开始对象表示法,它需要逗号,而不是键之间的分号:
squares.push({ // ??
Object.create(square); // ??
x: i; // ??
y: j; // ??
})
// should be
squares.push({
// Object.create(square), // we'll address this in a bit
x: i,
y: j,
})
此外,我不确定您是打算只推送新对象还是合并值x: i, y: j
,但您可以轻松完成第一项:
squares.push(Object.create(square))
如果您有ES6支持,那么第二个很容易:
// This will merge the created object with the new values
squares.push({
...square,
x: i,
y: j,
})
答案 5 :(得分:0)
squares.push({...})
将创建对象数组。每个对象都需要键和值。 squares.push({Object.create(square);
既没有创建密钥或值
该片段可以替换为
squares.push({ // ??
'a': Object.create(square), // ??
x: i, // ??
y: j, // ??
})
完整摘要
function my_game() {
var cols = 11;
var rows = 11;
var num = cols * rows;
var size = 50;
var spacing = 5;
var square = {
size: 50,
x: 0,
y: 0
}
var piece = {
size: 50,
x: 0,
y: 0,
name: king
}
function make_grid() {
var squares = [];
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
squares.push({ // ??
'a': Object.create(square), // ??
x: i, // ??
y: j, // ??
})
}
}
console.log(squares)
}
}