我正在使用Typescript继承来实现状态模式,但是当我新建超类时,我遇到了运行时错误。希望找出原因或错误,谢谢。
工作人员:https://plnkr.co/edit/XScXR4?p=preview
vehicle.ts 从“./car”;
导入{Car}export class Vehicle {
description: string = "Generic Vehicle";
swap(app: AppComponent): void {
app.vehicle = this.isCar(app) ? new Vehicle() : new Car();
}
/* Just a helper for demo purposes */
private isCar(app: AppComponent) {
return app.vehicle instanceof Car;
}
}
car.ts
import { Vehicle } from "./vehicle";
export class Car extends Vehicle {
description: string = "Car";
}
它基本上是一种状态模式。任何类型的车辆'Vehicle'或'Car'都可以在'AppComponent'中交换实例
app.component.ts
import { Component, OnInit } from '@angular/core';
import { Vehicle } from "./vehicle";
import { Car } from "./car";
@Component({
moduleId: module.id,
selector: 'my-app',
templateUrl: 'app.component.html',
})
export class AppComponent implements OnInit {
vehicle: Vehicle;
swap(): void {
this.vehicle.swap(this);
}
ngOnInit() {
//No problems works perfectly
//this.vehicle = new Car();
//Error: TypeError: Cannot read property 'prototype' of undefined(…)
this.vehicle = new Vehicle();
}
}
如果我使用'Car'实例(子类型)进行初始化,则没有问题。
如果我使用'Vehicle'实例(超类型)初始化,我会收到JS运行时错误
Error: TypeError: Cannot read property 'prototype' of undefined(…)
我真的很想知道为什么,因为这似乎是合法的事情。
我在这里做错了什么?
在plunker中,在app.component.ts中只需替换
this.vehicle = new Car()
与
this.vehicle = new Vehicle()
看到问题。
非常感谢 约翰