The object shows properties, but access to them returns undefined

So, I am writing a game, and I have a module that returns the keys that are currently pressed through jQuery. No problem. The problem occurs when I try to access the keys pressed:

var Keys = require('./lib/keys')

Player.prototype.update = function () {
    Keys(function (err, keydown) {
        console.log(keydown, keydown['w']);
        /* // To move a player up, for example:
          if (keydown['w']) {
            this.y += this.speed;
          }            
        */
    });
};

And the console shows which keys are pressed, but trying to access it gives me undefined instead of true.

Object    undefined
s: true
w: true
x: true
__proto__: Object

Anyone have any thoughts?

Update: Key Module

var $ = require('./jquery')

var Keys = function (callback) {
  var keydown = {};

  function keyName(event) {
    return String.fromCharCode(event.which).toLowerCase();
  }

  $(document).bind('keydown', function (event) {
    keydown[keyName(event)] = true;
    return false;
  });

  $(document).bind('keyup', function (event) {
    return false;
  });

  callback(null, keydown);
}

module.exports = Keys;

/ ************* * UPDATE * ************* /

This is the final solution:

./Library/keys.js var $ = require ('./jquery')

var Keys = function () {
  this.keydown = {};

  var keyName = function (event) {
    return String.fromCharCode(event.which).toLowerCase();
  }

  var self = this;
  $(document).bind('keydown', function (event) {
    self.keydown[keyName(event)] = true;
    return false;
  });

  $(document).bind('keyup', function (event) {
    self.keydown[keyName(event)] = false;
    return false;
  });
};

Keys.prototype.getKeys = function (callback) {
  callback(null, this.keydown);
}

module.exports = new Keys;

./Library/player.js var Keys = require ('./keys')

var Player = function (game, keys) {
  // stuff
}

Player.prototype.update = function() {
  var self = this;
  Keys.getKeys(function(err, keys) {
    if (keys['w']) {
      self.y -= self.speed;
    }
    if (keys['a']) {
      self.x -= self.speed;
    }
    if (keys['s']) {
      self.y += self.speed;
    }
    if (keys['d']) {
      self.x += self.speed;
    }
  });
+5
source share
3 answers

- , Keys .

, . , , console.log

, chrome webdev debugger; console.log , keydown. , .

: http://felix-kling.de/blog/2011/08/18/inspecting-variables-in-javascript-consoles/

+4

. , .

this reset , .

Player.prototype.update = function () {
    var self = this;
    Keys(function (err, keydown) {
        console.log(keydown, keydown['w']);
        /* // To move a player up, for example:
          if (keydown['w']) {
            self.y += self.speed;
          }            
        */
    });
};
+3

I do not see jQuery here. You need to provide more code, such as key code. But I guess you need to use http://api.jquery.com/event.which/ , for examplekeydown.which === 'w'

0
source

All Articles