gpt4 book ai didi

JavaScript:利用 setInterval() 调用类方法

转载 作者:行者123 更新时间:2023-12-02 21:03:35 26 4
gpt4 key购买 nike

我正在利用类方法制作一个简单的时钟。这是代码:

class clock{
constructor(date){
this.hour = date.getHours();
this.minute = date.getMinutes();
this.second = date.getSeconds();
}

updateHours(){
if (this.hour==24){
this.hour= 0;
} else this.hour++;
}
updateMinutes(){
if (this.minute==60){
this.minute= 0;
this.updateHours();
}
else this.minute++;
}

updateSeconds(){
if (this.second ==60){
this.second = 0;
this.updateMinutes();
} else{this.second++;}
return (console.log(`${this.hour}:${this.minute}:${this.second}`));
}
}

let date = new Date();
let myClock = new clock(date);

setInterval(myClock.updateSeconds(), 1000);


案例#1:

上面输出一行并且从不重复。在调试器中,程序似乎只是卡在 setInterval() 行,并且永远不会返回到提供的函数。为什么会这样?

=====

案例 #2:

  • setInterval(myClock.updateSeconds, 1000)

当我不包含函数的括号时,我应该获得函数描述,对吗?为什么这个输出 undefined:undefined:NaN

=====

案例#3:

  • setInterval("myClock.updateSeconds()", 1000)

当我在函数周围加上引号时,一切都开始完美运行

=====

请详细说明 setInterval() 的功能以及这些情况之间的关系。我虽然有正确的想法(从某种意义上说,该函数只是简单地求值并接受返回值,如案例 1 中所做的那样)。任何事情都有帮助!谢谢!

最佳答案

您没有正确使用setInterval。您需要传入稍后将执行的函数或类方法。目前,您正在自己执行该方法,并将该方法的返回值传递给 setInterval

您还需要将方法绑定(bind)到类的实例,因为当您将方法传递给setInterval时,它会丢失this > 引用。 this 将指向 window 对象`,而不是您的类的实例。

这样做:

setInterval(myClock.updateSeconds.bind(myClock), 1000);

codesandbox example

Mdn Function.bind()

关于JavaScript:利用 setInterval() 调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61279752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com