2016-12-19 2 views
-1

Я пытаюсь создать класс для обработки ввода в моей игре. У меня в настоящее время есть объект, называемый ключами, в моем классе, который содержит ключевые состояния. Однако ключи всегда не определены.Объекты не определены в классах

class PWInput{ 
constructor(){ 
    this.keys = {}; 

    document.onkeydown = function(e) { 
     try{ 
      var tk = String.fromCharCode(e.keyCode); 
      this.keys[tk] = true; 
     }catch(e){ 
      console.log(e); 
     } 
    } 

    document.onkeyup = function(e) { 
     try{ 
      var tk = String.fromCharCode(e.keyCode); 
      this.keys[tk] = false; 
     }catch(e){ 
      console.log(e); 
     } 
    } 

    } 
} 

Это меня озадачивает; объект ключей создается до того, как назначены обратные вызовы, поэтому они не должны всегда определяться? Даже если у меня console.log (this.keys) справа есть объект ключей, ключи всегда не определены.

Любая помощь приветствуется.

+0

это ключевое событие здесь – Geeky

+0

вы можете использовать bind, чтобы изменить контекст этого – Geeky

+1

Связанный: [Как получить доступ к правильному 'this' внутри обратного вызова?] (https: // stackoverflow.com/questions/20279484/how-to-access-the-correct-this-inside-a-callback) –

ответ

0

Если вы используете ES6 вы можете сделать document.onkeydown = (е) => {}

Таким образом, вы не должны связывать (это)

Если нет, то вам нужно будет перепривязывают это внутри конструктор класса, как указано @Geeky

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