2015-02-07 2 views
1

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

В основном я делаю игру защиты башни. Каждая башня динамически создается и включена onClick. Внутри слушателя onClick я пытаюсь вызвать метод внутри класса.

например игрок нажимает на башню и может выбрать обновление

Однако метод внутри слушателя outputing неопределенной функции. Я знаю, что это явно связано с моей областью. Но я не могу понять, что мне не хватает?

Конечно, это должно быть что-то вроде:

someListener: function(){ 
    this.game.doSomeOtherFunction(); 
} 

Я попытался console.log и someListener определенно называют, но метод внутри не определен.

Спасибо,

+2

Внутри прослушивателя событий это относится к элементу, в котором произошло событие, а не к внешнему пространству. Вам потребуется закрытие, которое сохраняет область видимости в переменной. – bobdye

+0

Ничего себе, это имеет большой смысл ... Спасибо. Хорошо, я посмотрю на закрытие. :) – ScottRedrup

ответ

4

Это не работает, потому что this изменяет контекст соответственно в функции обратного вызова. Вы можете сделать что-то вроде этого:

var self = this; 
... 
someListener: function(){ 
    self.game.doSomeOtherFunction(); 
} 
... 

Или просто вы могли бы также сделать это:

someListener: (function() { 
     var callback = function(){ 
      this.game.doSomeOtherFunction(); 
     } 
    return callback.bind(this); 
}()) 

Я надеюсь, что это помогает.

Смежные вопросы