отправка свойства объекта в качестве параметра функции возвращает неопределенное

0

Я попадаю в 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:

Теги:
object

1 ответ

0
Лучший ответ

Проблема заключается в вашей функции setInterval, где область изменений изменилась, и this стало глобальным (оконным) объектом.

измените функцию move на это:

Enemy.prototype.move = function() {
    var me = this;
    this.move_interval = setInterval(function() {moveEnemy(me.number)}, 2000);
    return this;
};
  • 0
    jsFiddle с вышеприведенным исправлением работает jsfiddle.net/A4UUy/1 фигурный идентификатор опубликовать скрипку, поскольку идентификатор уже сделал это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню