【问题标题】:Avoiding creating additional variables for the object with this and methods inside the object避免使用对象内部的 this 和方法为对象创建额外的变量
【发布时间】:2022-01-14 19:50:56
【问题描述】:

我创建了一个具有不同计时器方法的计时器对象,我对它的工作方式非常满意。但是,我对代码质量不满意。我无法理解如何在不创建其他变量的情况下获得相同的工作方法,特别是属性intervalId 和函数resetSecAddMin。如果没有这些额外的变量,这个解决方案是否可以工作?

代码:

const timer = {
  secondsPassed: 0,
  minsPassed: 0,
  intervalId: null,
  startTimer() {
    this.intervalId = setInterval(() => {
      const resetSecAddMin = () => { this.secondsPassed = 0; this.minsPassed += 1 };
      this.secondsPassed < 59 ? this.secondsPassed += 1 : resetSecAddMin();
      }, [1000]);
  },
  getTime() {
    return this.secondsPassed < 10 ? `${this.minsPassed}:0${this.secondsPassed}` : `${this.minsPassed}:${this.secondsPassed}`;
  },
  stopTimer() {
    clearInterval(this.intervalId);
  },
  resetTimer() {
    this.secondsPassed = 0;
    this.minsPassed = 0;
  },
};

我希望这个问题能为社区带来一些价值。我相信编写可读的代码并不比创建可行的解决方案更重要。

【问题讨论】:

  • 您想删除共享状态,这是让不同方法处理相同数据的唯一方法?我不确定您如何期望 stopTimer 这样的东西在没有访问计时器 ID 的情况下工作。我要更改的这段代码中的部分与共享属性无关。

标签: javascript object variables refactoring this


【解决方案1】:

您实际上不需要任何计时器。在 startTimer() 方法中,您记录开始时间this.startTime = Date.now()。然后在 getTime() 中,您以毫秒为单位获得增量 var delta = Date.now() - this.startTime。单位为毫秒,但您可以除以 1000 得到秒数,也可以通过除法计算分钟数。

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 2019-02-14
    • 2013-04-07
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多