var canvas = document.getElementById('canvas');
var c = canvas.getContext('2d');
canvas.style.backgroundColor = "grey";
var obje = {
width : 20,
height : 30,
speed : 5,
color : "white",
}
var arr = [];
for (i=0; i<10; i++) {
c.fillStyle = obje.color;
x=500*Math.random(); // ВЫЧИСЛЯЕМ РАНДОМНЫЕ КООРДИНАТЫ ПО ИКСУ
y=500*Math.random(); // ПО ИГРИКУ
obje.x = x; // ПРИСВАЕМ ЭТИ РАНДОМНЫЕ КООРДИНАТЫ В СВОЙСТВА ОБЪЕКТА
obje.y = y;
c.fillRect(x,y,obje.height,obje.width);
arr.push(obje);
};
Почему всем объектам присваиваются одни координаты?
Я жду, что каждый получит новые случайные)
Каждый вызов метода push()
в твоем скрипте, создает новую ссылку (на тот же самый obje
), а не новый объект.
Объекты в JavaScript всегда передаются по ссылке.
Проще всего добавлять в массив новый объект созданный литеральной записью:
const cnv = document.getElementById('cnv'),
ctx = cnv.getContext('2d'),
objects = [];
const rndUInt = to => Math.floor(Math.random() * to);
for (let i = 0; i < 10; i++) {
let newObj = {
x: rndUInt(300),
y: rndUInt(200),
width: 20,
height: 30,
speed: 5,
color: 'green'
};
ctx.fillStyle = newObj.color;
ctx.fillRect(newObj.x, newObj.y, newObj.width, newObj.height);
objects.push(newObj);
}
html, body, #cnv { height: 100%; margin: 0; padding: 0; }
#cnv { width: 100%; }
<canvas id="cnv"></canvas>
Если же ты хочешь именно копировать имеющийся объект, то в данном случае подойдет такое выражение:
let newObj = Object.assign({}, obje);
Оно копирует все свойства obje
(и их значения) в новый пустой объект {}
- и затем, ссылку на него присваивает переменнной.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть несколько таких блоков кода, как при нажатии на кнопку отправить присвоить классу mainli ещё один класс active?
Хотите улучшить этот вопрос? Update the question so it's on-topic for Stack Overflow на русском
Хочу сделать подобие строительного калькулятора где будут вписаны данныеДо конца не могу понять 1 вещь
Я пытаюсь создать переменную (объект), затем отредактировать ее после загрузки DOMВ данном случае в переменной pageQuery находятся селекторы, которые...