在打字稿中创建类时奇怪的未定义?

时间:2018-12-25 07:54:37

标签: typescript

我使用object关键字实例了一个新的newDigitalClockAnalogClock从基类Clock继承。之后,我从console.log tick() childclass开始运作。但是控制台显示undefined,结果来自tick()。我怎么了?

clock.ts

class Clock {
    h: number;
    m: number;

    constructor(h: number, m: number) {
        this.h = h;
        this.m = m;
    }
}

export class DigitalClock extends Clock {
    constructor(h: number, m: number) {
        super(h, m);
    }
    tick(): void {
        console.log(`beep beep at ${this.h}: ${this.m}`);
    }
}

export class AnalogClock extends Clock {
    constructor(h: number, m: number) {
        super(h, m);
    }
    tick(): void {
        console.log(`tick tock at ${this.h}:${this.m}`);
    }
}

app.ts

import { DigitalClock, AnalogClock } from "./clock";

const digital = new DigitalClock(1, 23);
const analog = new AnalogClock(2, 31);

console.log(digital.tick());
console.log(analog.tick());

控制台结果

beep beep at 1: 23
undefined
tick tock at 2:31
undefined

1 个答案:

答案 0 :(得分:3)

此:

console.log(digital.tick());

首先运行digital.tick,它会调用

console.log(`beep beep at ${this.h}: ${this.m}`)

已经输出到控制台的

-您想要的提示音。但是随后函数返回到原始行,该行尝试将digital.tick的返回值发送到控制台。由于没有这样的值,因此您将获得undefined输出。只需调用函数,也无需console.log,因为您已经在函数中完成了此操作:

digital.tick();
analog.tick();