javascript - ReferenceError: Kan inte komma åt <Class> innan initialisering
Jag har en enkel autoload-metod som initierar och returnerar en instans av en klass med hjälp av require()
Ovanför enkla kravet finns viss logik som begär information från databasen och kontrollerar om klassen finns i filsystemet.
let elementClass = require('./elements/' + element.name).default;
Node och ts-node kompilerar utan problem, men när jag skapar en instans med require får jag ReferenceError: Cannot access 'Object' before initialization
Object är huvudabstrakt klass som utökas av Element, som sedan utökas av elementtypen.
Obligatorisk är sista i kedjan klass elementType
Klassen initieras utan problem om det inte finns någon Object-klass som utökas, men Object-klassen testades utan några ändringar och med tom konstruktor. Och all logik överfördes till Element-klassen
Objekt.ts
export default class Object
{
public id: number;
public name: string;
public type: string;
public parent: number;
public owner: number;
public permission: string;
public data: {[name: string]: any};
protected dataSchema: {[name: string]: any} = {};
constructor(id: number, name: string, type: string, parent: number, owner: number, permission: string, data: {[name: string]: any})
{
if(new Validator().validate(data, this.dataSchema))
throw new Error('Invalid input data');
this.id = id;
this.name = name;
this.type = type;
this.parent = parent;
this.owner = owner;
this.permission = permission;
this.data = data;
}
}
Element.ts
import Object from "./object";
export default class Element extends Object
{
/**
* simple logic no constructor
*/
}
ElementType.ts
import Element from '../element';
export default class ElementType extends Element
{
/**
* Simple logic without constructor
*/
}
Även utan några enkla metoder inuti klasser fungerar det inte, det fungerar endast när huvudföräldraklassen inte används (Object)
Finns det något problem som kräver en klass som är dubbelutökad?
Svar #1
Object är ett reserverat ord, jag var tvungen att byta namn på klassen till något annat.