亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類中調用間隔時的錯誤回調

類中調用間隔時的錯誤回調

哈士奇WWW 2023-04-27 10:08:03
我正在嘗試在我的 js 類中創建間隔,代碼如下所示:class Clock {constructor(template) {   this.template = template;  this.timer = this.timer;  this.date = new Date(); // call date}render = () => {  let hours = this.date.getHours(); // get hours  if (hours < 10) hours = '0' + hours;  let minutes = this.date.getMinutes(); // get minutes  if (minutes < 10) minutes = '0' + minutes;  let seconds = this.date.getSeconds(); // get seconds  if (seconds < 10) seconds = '0' + seconds;  let output = hours + ':' + minutes + ':' + seconds;   return output; // output}stop = () => { // stop interval  clearInterval(this.timer);}start = () => { // start interval  this.timer = setInterval(this.render(), 1000);}}var clock = new Clock({template: ''});clock.start();我有這樣的錯誤:TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received '06:16:49'at setInterval (timers.js:166:3)at Clock.start (/home/runner/Training/index.js:28:20)at /home/runner/Training/index.js:33:7at Script.runInContext (vm.js:130:18)at Object.<anonymous> (/run_dir/interp.js:209:20)at Module._compile (internal/modules/cjs/loader.js:1137:30)at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)at Module.load (internal/modules/cjs/loader.js:985:32)at Function.Module._load (internal/modules/cjs/loader.js:878:14)at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)我認為問題是當我打電話this.timer = setInterval(this.render(), 1000);但是當我更改為錯誤this.timer = setInterval(this.render, 1000);時會顯示這樣javascript。所以任何人都可以幫助我。謝謝。
查看完整描述

4 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

您的代碼存在一些問題,但請嘗試以下操作:


class Clock {

  constructor(template) {

    this.template = template;

    this.date = new Date(); // call date

  }


  render() {

    let hours = this.date.getHours(); // get hours

    if (hours < 10) hours = "0" + hours;

    let minutes = this.date.getMinutes(); // get minutes

    if (minutes < 10) minutes = "0" + minutes;

    let seconds = this.date.getSeconds(); // get seconds

    if (seconds < 10) seconds = "0" + seconds;

    let output = hours + ":" + minutes + ":" + seconds;

    return output; // output

  }


  stop() {

    // stop interval

    clearInterval(this.timer);

  }


  start() {

    // start interval

    this.timer = setInterval(() => this.render(), 1000);

  }

}


const clock = new Clock("");

clock.start();

您的構造函數設置不正確(但也未使用)并且您的this引用已關閉。


實時示例: https ://codesandbox.io/s/clock-test-1r8dm?file=/src/index.js


根據 OP 的評論,OP 可能要求增加時間。如果是這樣,請將渲染替換為


  render() {

    const nD = new Date();

    let hours = nD.getHours(); // get hours

    if (hours < 10) hours = "0" + hours;

    let minutes = nD.getMinutes(); // get minutes

    if (minutes < 10) minutes = "0" + minutes;

    let seconds = nD.getSeconds(); // get seconds

    if (seconds < 10) seconds = "0" + seconds;

    let output = hours + ":" + minutes + ":" + seconds;

    return output; // output

  }


查看完整回答
反對 回復 2023-04-27
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

setInterval 接受函數的名稱


class Clock {

  constructor(template) {

    this.template = template;

    this.timer = this.timer;

    this.date = new Date();

  }


  render = () =>  {

    let time = this.date;

    let hours = time.getHours();

    if (hours < 10) hours = "0" + hours;

    let minutes = time.getMinutes();

    if (minutes < 10) minutes = "0" + minutes;

    let seconds = time.getSeconds();

    if (seconds < 10) seconds = "0" + seconds;


    let output = hours + ":" + minutes + ":" + seconds;


    console.log(output);

  }


  stop = () => {

    clearInterval(this.timer);

  }


  start =() => {

    this.timer = setInterval(this.render, 1000);

  }

}


var clock = new Clock({ template: "" });

clock.start();


查看完整回答
反對 回復 2023-04-27
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

setInterval需要一個回調函數。你不應該執行它。


start =() => {

     this.timer = setInterval(() => this.render(), 1000);

   }


class Clock {


  constructor(template) {

    this.template = template;

    this.timer = this.timer;

   // this.date = new Date(); // call date

  }


  render = () => {

    const date = new Date();

    let hours = date.getHours(); // get hours

    if (hours < 10) hours = '0' + hours;

    let minutes = date.getMinutes(); // get minutes

    if (minutes < 10) minutes = '0' + minutes;

    let seconds = date.getSeconds(); // get seconds

    if (seconds < 10) seconds = '0' + seconds;


    let output = hours + ':' + minutes + ':' + seconds;


    console.log(output)


    return output; // output

  }


  stop = () => { // stop interval

    clearInterval(this.timer);

  }


  start = () => { // start interval

    this.timer = setInterval(this.render, 1000);

  }


}


var clock = new Clock({ template: '' });

clock.start();


查看完整回答
反對 回復 2023-04-27
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

setInterval 創建了一個新范圍,所以this在 setInterval 內部不是同一個類實例,所以this.date.getHours()會拋出錯誤,因為this.datewill undefined。



查看完整回答
反對 回復 2023-04-27
  • 4 回答
  • 0 關注
  • 167 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號