访问时对象状态“更改”

时间:2019-09-12 21:41:41

标签: javascript

晚上好,初学者在这里。

我正在解决本书https://eloquentjavascript.net/16_game.html#i_cNfzuXtVqI中的一个练习,我想我快完成了,但是有一个细节。当我在if(arrowKeys.EscapeUp){...}内输出“ arrowKeys”对象的状态时,程序返回的日志状态很好,但是当我在控制台上访问该对象的属性时,其值不同。我想知道为什么我会得到不同的值,以及是否有办法解决它

<link rel="stylesheet" href="css/game.css">

<body>
<script>
  function trackKeys(keys) {
  let down = Object.create(null);
  function track(event) {
    if (keys.includes(event.key)) {
      down[event.key] = event.type == "keydown";
      down["EscapeUp"] = event.type == "keyup" && event.key == "Escape";
      event.preventDefault();
    }
  }
  window.addEventListener("keydown", track);
  window.addEventListener("keyup", track);
  return down;
}
const arrowKeys =
  trackKeys(["ArrowLeft", "ArrowRight", "ArrowUp", "Escape"]);


  function runLevel(level, Display) {
    let display = new Display(document.body, level);
    let state = State.start(level);
    let ending = 1;
    return new Promise(resolve => {
      runAnimation(time => {
        let pause = 0;
        if(arrowKeys.EscapeUp) {
          console.log(arrowKeys);
          console.log(arrowKeys.EscapeUp);
            if(pause == 0) pause = 1;
            else pause = 0;
        }
        if(pause == 0){
        state = state.update(time, arrowKeys);
        display.syncState(state);
        if (state.status == "playing") {
          return true;
        } else if (ending > 0) {
          ending -= time;
          return true;
        } else {
          display.clear();
          resolve(state.status);
          return false;
        }
        }
      });
    });
  }
  runGame(GAME_LEVELS, DOMDisplay);
</script>
</body>

这是我最初得到的,似乎是“正确”的输出,也是我“访问”该对象时希望得到的(单击3个绿色的点):

output

但是当我访问它时,我得到了:

output accessed

即使函数运行时,“ EscapeUp”之类的属性的值为“ true”。

您可以在这里运行我的代码:https://eloquentjavascript.net/code/#16.2,以便您可以复制我尝试的内容(在游戏运行时按逃逸按钮)

0 个答案:

没有答案