gpt4 book ai didi

typescript - 访问基类成员

转载 作者:搜寻专家 更新时间:2023-10-30 20:28:40 25 4
gpt4 key购买 nike

请参阅 TypeScript 网站上 playground 的继承示例:

class Animal {
public name;
constructor(name) {
this.name = name;
}
move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}

class Snake extends Animal {
constructor(name) {
super(name);
}
move() {
alert("Slithering...");
super.move(5);
}
}

class Horse extends Animal {
constructor(name) {
super(name);
}
move() {
alert(super.name + " is Galloping...");
super.move(45);
}
}

var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");

sam.move();
tom.move(34);

我更改了一行代码:Horse.move() 中的警报。我想访问 super.name,但返回的只是 undefined。 IntelliSense 建议我可以使用它并且 TypeScript 可以正常编译,但它不起作用。

有什么想法吗?

最佳答案

工作示例。注释如下。

class Animal {
constructor(public name) {
}

move(meters) {
alert(this.name + " moved " + meters + "m.");
}
}

class Snake extends Animal {
move() {
alert(this.name + " is Slithering...");
super.move(5);
}
}

class Horse extends Animal {
move() {
alert(this.name + " is Galloping...");
super.move(45);
}
}

var sam = new Snake("Sammy the Python");
var tom: Animal = new Horse("Tommy the Palomino");

sam.move();
tom.move(34);
  1. 您无需手动将名称分配给公共(public)变量。在构造函数定义中使用 public name 可以为您做到这一点。

  2. 您不需要从专门的类中调用 super(name)

  3. 使用 this.name 有效。

super的使用注意事项。

这在 section 4.9.2 中有更详细的介绍。语言规范。

Animal 继承的类的行为与其他语言中的行为没有什么不同。您需要指定 super 关键字以避免专用函数和基类函数之间的混淆。例如,如果您调用 move()this.move(),您将处理专门的 SnakeHorse 函数,所以使用 super.move() 显式调用基类函数。

没有混淆属性,因为它们是实例的属性。 super.namethis.name 之间没有区别——只有 this.name。否则,您可以根据您是属于特殊类还是基类创建具有不同名称的 Horse。

关于typescript - 访问基类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com