es wegen der Lade Problem ist! Wenn Sie Klasse C laden, fordern Sie Klasse A an, und es wird ausgeführt, bevor das C definiert ist.
Ich habe es selbst versucht, wenn ich es getan habe, wie Sie erwähnt und beide Klassen angefordert haben, der zweite Vergleich ist gescheitert.
jedoch diese funktioniert:
a.js
class A{
callMeLaterAligator(){
console.log(b instanceof A) ///this work
console.log(global.c instanceof A) //this now work
}
}
class B extends A{
}
var b = new B();
module.exports = A;
c.js
var A = require("./a");
class C extends A{
}
global.c = new C();
Die wichtigste Methode
require('services/c');
const a = require('services/a');
const aInst = new a();
aInst.callMeLaterAligator();
Ausgang
true
true
Um besser zu verstehen, was los ist, habe ich habe dieses Beispiel
a.js
console.log('Hello, I am class A and I am not yet defined');
class A{
}
class B extends A{
}
var b = new B();
console.log('Hello, I am class A and I will compare something');
console.log(b instanceof A) ///this work
console.log(global.c instanceof A) //this doesn't work
module.exports = A;
c.js
console.log('Hello, I am class C and I am not yet defined');
var A = require("./a");
console.log('Hello, I am class C and I will now try to defined myself');
class C extends A{
}
console.log('Hello, I am class C and I am defined');
global.c = new C();
console.log('Hello, I am class C and I am in global.c');
server.js
require('services/c');
Mit diesem Ausgang
Hello, I am class C and I am not yet defined
Hello, I am class A and I am not yet defined
Hello, I am class A and I will compare something
true
false
Hello, I am class C and I will now try to defined myself
Hello, I am class C and I am defined
Hello, I am class C and I am in global.c
Wenn Sie es ändern "a" zuerst erfordern, wird die C überhaupt nicht
server.js Änderung geladen:
require('services/a');
Mit diesem Ausgang
Hello, I am class A and I am not yet defined
Hello, I am class A and I will compare something
true
false
Ist 'global.c' definiert, wo Sie es verwenden? Wenn Sie Ihren Code betrachten, scheint es nicht so. Was passiert, wenn Sie Ihre 'global.c -Instanz von A' an das Ende von' c.js' verschieben? – nils
Ich habe eine Liste von Objekten, die in jeder Anfrage laufen, und ich kann nicht kontrollieren, wo das Objekt erstellt wird, wenn ich die Instanz von für einen Typ in einer externen Datei crateed ausführen, es gibt für mich false zurück. –
Sie brauchen dann einen anderen Ansatz.Wenn Sie die Ladereihenfolge nicht steuern können, schlägt die Ladefolge fehl. –