超时类的Getter返回未定义

时间:2018-11-26 17:27:55

标签: javascript node.js

所以我有这节课。它应该创建一个超时,使我可以查看完成的时间。但是,它什么也不返回。有人知道怎么了吗?这将在浏览器中返回错误。它仅适用于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)

3 个答案:

答案 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行为的原因。