joh*_*hni 5 javascript polymorphism typescript
请看下面的代码:
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
class Ge extends Greeter {
constructor(message: string) {
super(message);
}
greet() {
return "walla " + super.greet();
}
}
let greeter = new Ge("world");
console.log(greeter.greet()); // walla Hello, world
console.log((<Greeter> greeter).greet()); // walla Hello, world
Run Code Online (Sandbox Code Playgroud)
我希望第二个日志能够打印出来Hello, world。查看转Javascript码后的代码,我看到的是完全相同的命令,所以这并不奇怪。
真正的问题是,您如何greeter转换为扩展类?
JS(和TS)中的方法被附加到原型,该原型被附加到每个实例(类似于虚拟方法表)。调用方法时,实际函数是从实例的原型链中检索的,而不是从对象的已知类型中检索的。我知道的最接近的等效项是virtualC ++ 中的方法。
在代码中:
let greeter = new Ge('world');
// You expect:
Greeter.prototype.greet.call(greeter);
// JS actually does:
greeter.prototype.greet.call(greeter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8211 次 |
| 最近记录: |