即使在构造函数中初始化 TypeScript 变量后,它们也未定义。下面提供了完整的打字稿代码

亚什舒克拉

我有一些变量,如秒、毫秒、分钟、间隔等。我正在构造函数中初始化所有变量,并在 startinterval、stopinterval 函数中使用它们。

在窗口加载时,我已经调用了 init 函数并根据它们的 id 将事件附加到按钮,但是当我单击开始按钮时,this.timerId 上会引发未定义错误。

下面提供了 Html 和类型脚本代码。

需要知道我做错了什么。

HTML代码

<!DOCTYPE html>
<html>

<head>
    <title></title>
    <script src="Index.js"></script>
</head>

<body>
    <h1>Timer</h1>
    <a id="minutes">1</a><a id="seconds">1</a><a id="miliseconds">1</a>
    <button id="btnStart" value="Start" >Start</button>
    <button id="btnPause" value="Pause" >Pause</button>
    <button id="btnStop" value="Stop" >Clear</button>
</body>

</html>

JS代码

class Timer {
    seconds: number;
    miliseconds: number;
    minutes: number;
    interval: number;
    timerId: number;

    constructor() {
        this.seconds = 0;
        this.miliseconds = 0;
        this.minutes = 0;
        this.interval = 25;
        this.timerId = -1;
    }

    startTimer = function () {
        if (this.timerId == -1) {
            window.setInterval('this.timerActivate()', this.interval);
        }
    };

    pauseTimer = function () {
        window.clearInterval(this.timerId);
        this.timerId = -1;
    };

    stopTimer = function () {
        this.pauseTimer();
        this.miliseconds = 0;
        this.seconds = 0;
        this.minutes = 0;
        this.displayTimer();
    };

    displayTimer = function () {
        document.getElementById('miliseconds').innerHTML = this.miliseconds.toString();
        document.getElementById('seconds').innerHTML = this.seconds.toString();
        document.getElementById('minutes').innerHTML = this.minutes.toString();
    };

    timerActivate = function () {
       
        this.miliseconds += this.interval;

        if (this.miliseconds >= 1000) {
            this.miliseconds = 0;
            this.seconds += 1;
        }

        if (this.seconds >= 60) {
            this.miliseconds = 0;
            this.seconds = 0;
            this.minutes += 1;
        }

        this.displayTimer();
    };

    init = function (startButton: string, pauseButton: string, clearButton: string) {
        document.getElementById(startButton).addEventListener('click', this.startTimer, false);
        document.getElementById(pauseButton).addEventListener('click', this.pauseTimer, false);
        document.getElementById(clearButton).addEventListener('click', this.stopTimer, false);

        this.displayTimer();
    }
}

window.onload = function () {
    var timer = new Timer();
    timer.init("btnStart", "btnPause", "btnStop");
}

萨拉瓦纳

因为this当您使用function () {}语法或传递未绑定的函数引用时,您的上下文 ( ) 会发生变化你可以做几件事。

更改函数定义以使用箭头函数

startTimer = () => {
    if (this.timerId == -1) {
        window.setInterval('this.timerActivate()', this.interval);
    }
};

或者将您的事件侦听器包装在箭头函数中:

document.getElementById(startButton).addEventListener('click', () => this.startTimer(), false);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在类本身中初始化 TypeScript 变量与在构造函数中初始化的区别

来自分类Dev

关于类构造函数中未初始化变量的 TypeScript 错误

来自分类Dev

更改后在构造函数中初始化const变量

来自分类Dev

初始化后在构造函数中调用方法

来自分类Java

在构造函数中初始化空实例变量

来自分类Java

变量未在默认构造函数中初始化

来自分类Dev

Java构造函数中类变量的初始化

来自分类Dev

cppcheck:构造函数中未初始化的成员变量

来自分类Java

在Java中的构造函数之前初始化最终变量

来自分类Dev

在构造函数中初始化Enum变量

来自分类Dev

在构造函数或声明中初始化变量

来自分类Dev

在类的构造函数中初始化ifstream变量

来自分类Dev

在构造函数中初始化类成员变量

来自分类Dev

在没有构造函数的类中初始化变量

来自分类Dev

我如何在初始化列表中的构造函数之后初始化变量/对象?

来自分类Dev

在构造函数中初始化的变量未保持初始化状态(C ++)

来自分类Dev

是否可以在构造函数体内而不是初始化列表中初始化成员变量?

来自分类Dev

构造函数不初始化变量

来自分类Dev

如何使可以使用Typescript中的对象或常规参数构造函数初始化的类?

来自分类Java

我应该在构造函数内部还是外部构造函数中初始化变量

来自分类Dev

打字稿无法推送到knockoutObservableArray,因为即使在初始化之后也未定义

来自分类Dev

在从构造函数或init块调用的重写的抽象函数中初始化时,变量未正确初始化

来自分类Dev

初始化变量Typescript时,对象可能是“未定义”的

来自分类Dev

如何访问初始化函数中不是成员变量的构造函数参数?

来自分类Dev

构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化

来自分类Dev

在python的构造函数中初始化全局变量后如何保留它的值?

来自分类Java

在子类中初始化超类变量(构造函数中需要)

来自分类Dev

我可以检查构造函数主体中在初始化列表中设置的变量吗?

来自分类Dev

如何在辅助构造函数中初始化变量并在 kotlin 中调用 super?

Related 相关文章

  1. 1

    在类本身中初始化 TypeScript 变量与在构造函数中初始化的区别

  2. 2

    关于类构造函数中未初始化变量的 TypeScript 错误

  3. 3

    更改后在构造函数中初始化const变量

  4. 4

    初始化后在构造函数中调用方法

  5. 5

    在构造函数中初始化空实例变量

  6. 6

    变量未在默认构造函数中初始化

  7. 7

    Java构造函数中类变量的初始化

  8. 8

    cppcheck:构造函数中未初始化的成员变量

  9. 9

    在Java中的构造函数之前初始化最终变量

  10. 10

    在构造函数中初始化Enum变量

  11. 11

    在构造函数或声明中初始化变量

  12. 12

    在类的构造函数中初始化ifstream变量

  13. 13

    在构造函数中初始化类成员变量

  14. 14

    在没有构造函数的类中初始化变量

  15. 15

    我如何在初始化列表中的构造函数之后初始化变量/对象?

  16. 16

    在构造函数中初始化的变量未保持初始化状态(C ++)

  17. 17

    是否可以在构造函数体内而不是初始化列表中初始化成员变量?

  18. 18

    构造函数不初始化变量

  19. 19

    如何使可以使用Typescript中的对象或常规参数构造函数初始化的类?

  20. 20

    我应该在构造函数内部还是外部构造函数中初始化变量

  21. 21

    打字稿无法推送到knockoutObservableArray,因为即使在初始化之后也未定义

  22. 22

    在从构造函数或init块调用的重写的抽象函数中初始化时,变量未正确初始化

  23. 23

    初始化变量Typescript时,对象可能是“未定义”的

  24. 24

    如何访问初始化函数中不是成员变量的构造函数参数?

  25. 25

    构造函数执行顺序/顺序:函数中静态变量(类实例)的依赖初始化

  26. 26

    在python的构造函数中初始化全局变量后如何保留它的值?

  27. 27

    在子类中初始化超类变量(构造函数中需要)

  28. 28

    我可以检查构造函数主体中在初始化列表中设置的变量吗?

  29. 29

    如何在辅助构造函数中初始化变量并在 kotlin 中调用 super?

热门标签

归档