Я пытаюсь создать игровой демон и столкнуться с проблемой, когда я пытаюсь добавить кнопку 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, чтобы решить эту проблему, но мне просто интересно, есть ли способ исправить мой первоначальный способ? Благодарю.
Я не полный мастер 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
...
}
}
это всегда указывает на текущий контекст функции в 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.
this
всегда указывает на функцию ... это зависит от контекста вызова, правильно?
this
событие jQuery click относится к элементу clicked.
this
событие jQuery click относится к элементу clicked.this
почти никогда не относится к функции.