打字稿中的继承返回未定义

问题描述 投票:0回答:2

我正在编写下面的代码,我无法理解它是如何工作的。在 C# 或 Java 中,当我们使用 base 或 super 关键字时,它会返回值,但在打字稿中,我得到“未定义”。如果我使用“this”而不是“super”,它就可以工作。

class Person {
    public firstName: string;
    public lastName: string;

    constructor(fn: string, ln: string) {
        this.firstName = fn;
        this.lastName = ln;
    }
}

class Customer extends Person {

    constructor(fn: string, ln: string) {
        super(fn, ln);
    }

    displayDetails() {
        console.log(`First Name :${super.firstName}\tLast Name :${super.lastName}`);
    }
}

let c = new Customer("Pradeep", "Kumar");
c.displayDetails();

有人可以解释一下执行过程吗?

javascript typescript es6-class
2个回答
1
投票

请参阅 MDN 上的相关文档:super

super 关键字用于访问对象文字或类的 [[Prototype]] 上的属性,或调用超类的构造函数。

请注意,实例字段是在实例上设置的,而不是在构造函数的原型上设置的,因此您不能使用 super 来访问超类的实例字段。


0
投票

不要使用

super
,而是使用
this

displayDetails() {
    console.log(`First Name :${this.firstName}\tLast Name :${this.lastName}`);
}

游乐场

© www.soinside.com 2019 - 2024. All rights reserved.