E 'a causa del rilascio di carico! Quando si carica la classe C, richiede la classe A e viene eseguita prima che sia definita la C.
L'ho provato da solo, se l'avessi fatto come hai detto e richiesto entrambe le classi, il secondo non è riuscito a comparare.
Tuttavia questo funziona:
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();
Il metodo principale
require('services/c');
const a = require('services/a');
const aInst = new a();
aInst.callMeLaterAligator();
avente uscita
true
true
Per capire meglio cosa sta succedendo, ho creato questo esempio
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');
Avere questa uscita
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
Se si modifica a richiedere "una" prima, poi la C non è caricato a tutti
server.js cambiamento:
require('services/a');
Avendo questa uscita
Hello, I am class A and I am not yet defined
Hello, I am class A and I will compare something
true
false
È 'global.c' definito dove lo si utilizza? Guardando il tuo codice, non sembrerebbe così. Cosa succede se sposti la tua 'global.c instanceof A' alla fine di' c.js'? – nils
Ho un elenco di oggetti che vengono eseguiti in ogni richiesta e non riesco a controllare dove viene creato l'oggetto quando eseguo l'istanza di per un tipo creato in un file esterno restituisce false per me. –
Avrai bisogno di un approccio diverso allora.Se non riesci a controllare l'ordine di caricamento, fare affidamento sull'ordine di caricamento fallirà. –