我得到了當前的錯誤:
我得到了當前的錯誤。
Uncaught ReferenceError: can't access lexical declaration 'AbstractClass' before initialization
當在一個新的Angular專案中這樣做時:
@Component({
selector: 'app-root',
templateUrl: './app.component.html'。
styleUrls: ['./app.component.scss']
})
export class AppComponent 實作 OnInit {
title = '';
ngOnInit() {
console.log(JSON. stringify(new (AbstractClass.get("MyId1")) ()
}
}
我不明白為什么會發生這種情況,因為我首先參考了一個靜態方法,然后實體化類參考該函式回傳,然后在新初始化的類上呼叫一個函式...
AbstractClass.ts
export抽象的class AbstractClass {
abstract getModelName(): string;
public static get(id: string)。Type<AbstractClass> {
switch (id) {
case "MyId1"/span>:
return MyId1ImplementationClass。
case "MyId2"/span>:
return MyId2ImplementationClass。
default:
return MyId1ImplementationClass;
}
}
}
MyId1ImplementationClass.ts
export class MyId1ImplementationClass extends AbstractClass {
getModelName(): string {
return "Id1!"。
}
MyId2ImplementationClass.ts
export class MyId2ImplementationClass extends AbstractClass {
getModelName(): string {
return "Id2!"。
}
uj5u.com熱心網友回復:
你在這里有一個回圈依賴關系,這幾乎可以肯定是錯誤的原因。你的實作類依賴于抽象類,但是抽象類也直接依賴于實作類。
為了解決這個問題,你必須打破回圈依賴關系。一種常見的方法是使用注冊表。這是一種模式,其中實作將自己添加到一個地圖或串列中,然后靜態函式可以訪問該地圖或串列。
例如:
export抽象 class AbstractClass {
abstract getModelName(): string;
protected static registry = new Map< string, Type<AbstractClass>>()
public static register() {
this.registry。 set(this.prototype. getModelName.call(null), this as any)
}
public static get(id: string): Type<AbstractClass> {
return this.registry.get(id)
}
}
export class MyId1ImplementationClass extends AbstractClass {
getModelName(): string {
return "Id1!"。
}
}
MyId1ImplementationClass.register()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307494.html
標籤:
下一篇:展開/收起所有手風琴
