Просто экспериментирую с JS + canvas и, похоже, я врезался в стену.
«Цель» моего минимального приложения - щелкнуть в любом произвольном месте на холсте, нажать кнопку рисования и нарисовать квадраты там, где вы щелкнули.
исходящий из фона ОО ... я (пытался) использовать ОО, чего в js я не совсем понимаю.
но в основном у меня есть пользовательский объект Square
function Square(l, w, x, y) {
this.length = l;
this.width = w;
this.posx = x - l/2;
this.posy = y - w/2;
//test
//ctx.fillStyle = "rgb(20,0,0)";
//ctx.fillRect(this.posx,this.posy,this.length,this.width);
this.draw = function() {
ctx.fillStyle = "rgb(20,0,0)";
ctx.fillRect(this.posx,this.posy,this.length,this.width);
}
}
, который я добавляю в массив каждый раз, когда пользователь нажимает ...
вот обработчик события, когда я нажимаю на холст.
function addTo(evt) {
pos = getMousePos(evt);
var sq = new Square(50, 50, pos.x, pos.y);
list.push(sq);
output.innerText = "("+sq.posx+","+sq.posy+")";
}
и вот где я (попытка) нарисовать квадраты.
function renderStack() {
//alert(list);
canvas.width = canvas.width;
for(var o in list) o.draw();
}
и это ошибка:
Uncaught TypeError: Object 0 has no method 'draw'
Я получаю похожую ошибку при попытке получить доступ к переменным для этого объекта.
Кажется, что после того, как я добавляю их в список, Дж.С. забывает, какого они типа? - потому что, когда я печатаю массив, он полон [Object object]
спасибо.