Gegeben ein bestimmtes Setup in Typoskript Ich enden zur Laufzeit mit leeren Klassenobjekte in Javascript. Das Setup besteht einfach aus 2 Klassen, die sich gegenseitig referenzieren, wobei einer davon im Bereich des anderen leer ist. Ich weiß, wie ich es vermeiden kann (indem ich eine dritte Klasse zwischen den beiden einführe), aber ich bin neugierig, warum es passiert und gibt es eine Möglichkeit, diese Querverweise noch zu machen und trotzdem einen funktionierenden Code zu haben. Ich habe jede Menge Setup versucht, um es zum Laufen zu bringen, also bin ich hier.Typoskript-Klasse wird leer
Setup: jede Klasse in einem eigenen Modul (Modulnamen und Klassennamen irrelevant) KlasseA ist unser Haupteintrag:
// KlasseA
import ClassB = require('ClassB');
import ClassC = require('ClassC');
class ClassA
{
constructor()
{
console.log(ClassC.TEST);// shows 1
new ClassB();// shows null
console.log(ClassC.TEST);// shows 1
}
}
export = ClassA;
// ClassB (in verschiedenen Modul)
import ClassC = require('ClassC');
class ClassB
{
public static ClassBRef:any;
constructor()
{
console.log(ClassC.TEST);// in this scope ClassC is an empty object with no properties
}
}
export = ClassB;
// ClassC (in anderen Modul)
import ClassB = require('ClassB');
class ClassC
{
public static TEST:number = 1;
constructor()
{
ClassB.ClassBRef;
}
}
export = ClassC;
Da ClassB auf ClassC- und ClassC-Referenzen verweist ClassB hier ist das Ergebnis: ClassC in ClassA-Bereich existieren ohne Problem, aber innerhalb ClassB-Bereich, ClassC ist ein leeres Objekt zur Laufzeit ohne Eigenschaften. Mit anderen Worten, in Maschinenschrift ist alles in Ordnung, aber Javascript wird es nicht haben. Das Ändern von Modulnamen, Speicherort, Klassennamen, Verwendung des statischen oder Instanzbereichs, in Konstruktor- oder Instanzmethoden oder statischen Methoden usw. macht keinen Unterschied, und ClassC ist im ClassB-Bereich immer leer.
Wie gesagt, die Lösung ist eine dritte Klasse, die Kommunikation mit den 2 fehlerhaften Klassen (also mindestens eine der 2 Klassen hat keine Referenzen auf die zweite), aber meine Frage ist, wie es geht ohne Benötigen Sie eine dritte Klasse und ohne den Querverweis zwischen den 2 Klassen zu entfernen?
Thx für die Erklärung, ich werde versuchen, dass und melde dich zurück. –
Beide gepostete Antworten sind gut, aber dieses hat mehr Erklärung, warum mein Setup fehlschlägt. Akzeptiert. Eine weitere Frage wäre, warum der Typskript-Compiler kein Problem mit diesem Setup sieht. Da mein Typoskript-Projekt automatisch generiert wird (aus einer anderen Sprache), werde ich die Bridge-Lösung der dritten Klasse beibehalten, da sie am besten in den konvertierten Code passt. Thx –