在对象的键内传递键

时间:2019-11-01 21:06:33

标签: javascript

如果运行此代码,则会注意到此错误:

  

错误:未捕获ReferenceError:时间未定义

我知道问题出在哪里,但是我不明白为什么我不能在名为stats的对象的键中分配键。问题出在下面代码的第五行。卸下该部件可以解决问题。有什么建议吗?我希望能够将stats.times乘以2以获得总时间。

'use strict'

var stats = {
  times: 0,
  totalTime: times * 2
}

var timer = {
  currentTime: 2,
  defaultTime: 2,
  state: "paused",
  running() {
    setTimeout(() => {
      if (timer.state === "running") {
        if (timer.currentTime > 0) {
          console.log(timer.currentTime);
          timer.currentTime--;
          timer.running();
        } else if (timer.currentTime === 0) {
          stats.times++;
          console.log("Timers completed: " + stats.times);
          console.log("Time total: " + stats.totalTime);
        }
      }
    }, 1000);
  },

  startpause() {
    if (timer.state === "paused") {
      timer.state = "running";
      timer.running();
    } else if (timer.state === "running") {
      if (timer.currentTime === 0) {
        timer.restart();
      } else {
        timer.state = "paused";
      }
    }
  },

  restart() {
    timer.state = "paused";
    timer.currentTime = timer.defaultTime;
  }
}

timer.startpause();

2 个答案:

答案 0 :(得分:0)

在基本创建时间之前,不可能执行* 2。 由于这两个参数都位于同一对象上,因此它们是在同一时间创建的。

如果您想要更具动态性的东西,可以编辑时间并自动更改可以使用的总时间:

var stats = {
 times: 0,
 get totalTime() {
    return this.times * 2
 }
}

答案 1 :(得分:0)

您可以定义一个吸气剂,以便访问stats.totalTime()将运行一个函数来计算结果。

'use strict'

var stats = {
  times: 0,
  get totalTime() {
    return this.times * 2;
  }
}

var timer = {
  currentTime: 2,
  defaultTime: 2,
  state: "paused",
  running() {
    setTimeout(() => {
      if (timer.state === "running") {
        if (timer.currentTime > 0) {
          console.log(timer.currentTime);
          timer.currentTime--;
          timer.running();
        } else if (timer.currentTime === 0) {
          stats.times++;
          console.log("Timers completed: " + stats.times);
          console.log("Time total: " + stats.totalTime);
        }
      }
    }, 1000);
  },

  startpause() {
    if (timer.state === "paused") {
      timer.state = "running";
      timer.running();
    } else if (timer.state === "running") {
      if (timer.currentTime === 0) {
        timer.restart();
      } else {
        timer.state = "paused";
      }
    }
  },

  restart() {
    timer.state = "paused";
    timer.currentTime = timer.defaultTime;
  }
}

timer.startpause();