【问题标题】:Typescript: variable value undefined despite being initialized in constructor打字稿:变量值未定义,尽管在构造函数中初始化
【发布时间】:2019-02-25 19:08:00
【问题描述】:

我有num1: number,然后

constructor(){
  ...
  this.num1 = 0;
}

在一个类中。

但是当在函数console.log(this.num1)console.log(typeof this.num1) 中登录时,我两次都得到undefined

为什么我的变量的值在这里未定义?

【问题讨论】:

  • 嗨!请查看有关 how to ask a good question 的指南以及什么构成 minimal reproducible example。我猜您遇到问题的函数的 this 值与您预期的不同,但如果没有更多信息,很难更具体。祝你好运!
  • 方法是如何被调用的?正如@jcalz 提到的,this 的值很可能不是该类的实例。
  • 你点击一个按钮,然后通过调用前面提到的需要当前类实例的num1的函数来处理这个事件

标签: typescript console namespaces undefined


【解决方案1】:

正如其他人在 cmets 中提到的,可能的罪魁祸首是 this 不是您所期望的功能。

如果你有这样的课程:

class Foo {
    public myValue: number;
    constructor() { this.myValue = 0; }
    barOne() { console.log(this.myValue); }
    barTwo = () => { console.log(this.myValue); }
}

barOnebarTwo 在类外部实体使用 ass 回调时表现不同。

当使用类实例方法作为按钮的回调时就是这种情况,就像你的情况一样。

深入了解this 在 javascript 和 typescript 中的工作原理是很有用的(如果 ecmascript 6 可用,javascript 的行为与 typescript 相同),并且有很多关于它的好文章。

但简单的解决方案是使用“箭头函数”,就像我在上面的 barTwo 方法中所做的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-27
    • 2015-02-19
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    相关资源
    最近更新 更多