У меня проблема с методом setInterval() в Javascript. Мой основной класс:Javascript setInterval не работает с этим. объекты
var sq1 = new Square(20, 20);
window.onkeydown = function (e)
{
var key = e.keyCode ? e.keyCode : e.which;
if (key == 38)
{
sq1.moveUp();
}
}
И у меня есть следующая функция конструктора.
function Square(x,y)
{
var multiplicator = 10;
this.xPos = x;
this.yPos = y;
this.domObj = document.createElement("div");
this.domObj.style.position = "absolute";
this.domObj.style.left = this.xPos * multiplicator + 'px';
this.domObj.style.top = this.yPos * multiplicator + 'px';
this.domObj.style.width = multiplicator + 'px';
this.domObj.style.height = multiplicator + 'px';
this.domObj.style.backgroundColor = "black";
document.getElementById("idCanvas").appendChild(this.domObj);
this.moveUp = function()
{
this.yPos--;
this.domObj.style.top = (this.yPos * multiplicator) + 'px';
}
}
Хорошо, что сейчас работает отлично, просто перемещая каждое событие keyUp 10px вверх. Но я хотел бы вызвать this.moveUp() каждые 1000 миллисекунд автоматически после события keyUp. Но когда я пытаюсь это:
this.moveUp = function()
{
setInterval(function()
{
this.yPos--;
this.domObj.style.top = (this.yPos * multiplicator) + 'px';
}, 1000);
}
Я получаю сообщение об ошибке, что «это» является нулевым.
Как это исправить (желательно без jQuery)?
Проголосовать да? Думал, я сделал это правильно, но, возможно, нет? – Ribs
не 'scope', а' target'. Кроме того, классы не задействованы. – Ben
Да, я знаю, что классы не задействованы, но я для ясности использую те же термины, которые использовал OP. – Ribs