所以我有这节课。它应该创建一个超时,使我可以查看完成的时间。但是,它什么也不返回。有人知道怎么了吗?这将在浏览器中返回错误。它仅适用于node.js
class Timeout extends setTimeout{
constructor(){
super(...arguments)
this.start = new Date()
}
get timeLeft(){
console.log('getting time left')
return this.start
}
}
console.log(new Timeout().timeLeft)
答案 0 :(得分:2)
我认为没有任何理由要从setTimeout扩展。 setTimeout不是类或构造函数。 Node显然可以让您摆脱它,但是浏览器却不能。取而代之的是:
class Timeout {
constructor(...args) {
setTimeout(...args);
this.start = new Date();
}
get timeLeft(){
console.log('getting time left');
return this.start;
}
}
new Timeout(() => console.log('timer went off'), 1000).timeLeft
答案 1 :(得分:0)
由于get
定义不允许,因此setTimeout
方法定义似乎不起作用。我认为您最好使用合成而不是扩展:
class Timeout {
constructor() {
this.timeout = new setTimeout(...arguments);
this.start = new Date();
}
// ...
以这种方式"getting time left"
沿this.start
记录。
答案 2 :(得分:0)
因此,您为名为timeLeft
的字段编写了getter方法,但是您将字段命名为start
。
另外,您只能扩展类,但是您尝试扩展不正确的函数。
不同的浏览器表现不同,Node.js是另一个运行JS的环境。 这就是为什么我们使用翻译过程来统一跨不同环境的JS行为的原因。