code: function (keyData) {
                  this.shift = {};
                  this.names = Util.clone(Util.whenUndefined(keyData.names, []));
                  this.character = Util.whenUndefined(keyData.char, null);
                  this.shift.character = Util.whenUndefined(keyData.shift, Util.whenUndefined(keyData.char, null));
                  this.keyCode = {
                      ie: keyData.ie,
                      mozilla: Util.whenUndefined(keyData.moz, keyData.ie)
                  };
                  this.charCode = null;
                  this.shift.charCode = null;
                  if (!Util.isUndefined(keyData.ascii)) {
                      this.charCode = Util.whenUndefined(keyData.ascii.norm, null);
                      this.shift.charCode = Util.whenUndefined(keyData.ascii.shift, Util.whenUndefined(keyData.ascii.norm, null));
                  }
              }
docs: A representation of a keyboard key. This class cannot be instantiated manually. All instances are generated by the Keycoder module.
  @Class Key
  @internal
  @property {string[]} names - Names that the key is called. Ex. "BACKSPACE", "INSERT"
  @property {number} keyCode.ie - IE key code
  @property {number} keyCode.mozilla - Mozillia key code
  @property {string|null} character - Key character
  @property {number|null} charCode - ASCII character code
  @property {string|null} shift.character Key shift character
  @property {number|null} shift.charCode Shift ASCII character code