JavaScript проблема об «этом»

1

Я пытаюсь создать игровой демон и столкнуться с проблемой, когда я пытаюсь добавить кнопку clickEventHanlder к кнопке, код идет здесь:

function GameConstructor(){
    this.start = startGame;
    this.count = 5;
    ...
    function startGame(){
        if(this.count > 5){ //here goes the problem, this don't point to the game object when I click the button
            ...
        }
}
...
var game = new GameConstructor(); //game object has a method called start
$("#someBtn").click(game.start); //in the method start this now point to the button so this.count is undefined.

Я знаю, что могу определить глобальную переменную count = 5, чтобы решить эту проблему, но мне просто интересно, есть ли способ исправить мой первоначальный способ? Благодарю.

Теги:

2 ответа

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

Я не полный мастер JavaScript, но я предполагаю, что this внутри вашей вложенной функции относится к этой вложенной функции, а не к внешнему экземпляру.

Многие люди предпочитают вместо этого создавать переменную self, чтобы быть более ясными относительно этого материала. Возможно, попробуйте это:

function GameConstructor(){
    var self = this;    // <-- here, then reference self subsequently
    self.start = startGame;
    self.count = 5;
    ...
    function startGame(){
        if(self.count > 5){ //here goes the problem, this don't point to the game object when I click the button
            ...
        }
}
  • 0
    this событие jQuery click относится к элементу clicked.
  • 0
    this почти никогда не относится к функции.
Показать ещё 6 комментариев
0

это всегда указывает на текущий контекст функции в Javascript. Означает низшую функцию только из "этого". Итак, вы можете сделать;

function GameConstructor(){
    var self= this;
    this.start = startGame;
    this.count = 5;
    ...
    function startGame(){
        if(self.count > 5){ //here goes the problem, this don't point to the game object when I click the button
            ...
        }
}
...
var game = new GameConstructor(); //game object has a method called start
$("#someBtn").click(game.start); //in the method start this now point to the button so this.count is undefined.
  • 2
    Я не думаю, что this всегда указывает на функцию ... это зависит от контекста вызова, правильно?
  • 1
    this событие jQuery click относится к элементу clicked.
Показать ещё 8 комментариев

Ещё вопросы

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