Я попадаю в javascript/jQuery и поэтому строю завод против зомби. Я создал объект для врагов и создаю ссылку для каждого врага, который появляется с этим кодом: Это объект:
var Enemy = function(row, num) {
'use strict';
this.row = row;
this.number = num;
this.move_interval;
this.html_element;
};
Enemy.prototype.create = function() {
this.html_element = $('<div class="enemy '+this.row+' full" style="left:1140px;top: '+$('tr.row_'+this.row).position().top+'px"></div>').prependTo('.container');
return this;
};
Enemy.prototype.die = function() {
clearInterval(this.move_interval);
this.html_element.remove();
return this;
};
Enemy.prototype.move = function() {
this.move_interval = setInterval(function() {moveEnemy(this.number)}, 2000);
return this;
};
это интервал для создания врага (i определяется как глобальная переменная "var я = 0;"):
enemy_interval = setInterval("addEnemy(i++)", 9000)}
это функция создания Врага (случайная вещь - это потому, что у меня есть четыре строки, на которые мог бы появиться противник, это также то, что для строки свойств объекта):
function addEnemy(num) {
if (num < 5) {
switch (getRandom(1,4)) {
case 1:
enemies[num] = new Enemy("one", num);
enemies[num].create().move();
break;
case 2:
enemies[num] = new Enemy("two", num)
enemies[num].create().move();
break;
case 3:
enemies[num] = new Enemy("three", num)
enemies[num].create().move();
break;
case 4:
enemies[num] = new Enemy("four", num)
enemies[num].create().move();
break;
default:
break;
}
}
}
И вот здесь появляется ошибка:
function moveEnemy(number) {
enemies[number].html_element.animate({left: "-=150"}, 2000, "linear");
}
Я попробовал несколько способов, отредактировав функцию moveEnemy, чтобы получить свойство "html_element" в качестве параметра и сделать это следующим образом:
function moveEnemy(obj) {
obj.animate({left: "-=150"}, 2000, "linear");
}
Я попытался написать его, как враги [number] [html_element], потому что я читал, что на самом деле это способ получить свойство, но он не работает. Это всегда говорит мне, что параметр ('obj' или как указано выше 'number' не определен).
Кто-нибудь может увидеть эту ошибку? D:
Проблема заключается в вашей функции setInterval
, где область изменений изменилась, и this
стало глобальным (оконным) объектом.
измените функцию move
на это:
Enemy.prototype.move = function() {
var me = this;
this.move_interval = setInterval(function() {moveEnemy(me.number)}, 2000);
return this;
};