這是因爲加載問題的!加載類C時,它會請求類A,並在C被定義之前運行。
我已經自己嘗試過,如果我按照你提到的要求做了這兩個類,那麼第二個比較失敗。
然而,這一個工作的:
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();
主要方法
require('services/c');
const a = require('services/a');
const aInst = new a();
aInst.callMeLaterAligator();
具有輸出
true
true
爲了更好地瞭解怎麼回事,我創造了這個例子
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');
有了這個輸出
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
如果你改變它要求 「」 第一,那麼C是不是在所有
server.js變裝:
require('services/a');
擁有此輸出
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'是在你使用它的地方定義的嗎?看着你的代碼,看起來並不是這樣。如果將'global.c instanceof A'移動到'c.js'的末尾,會發生什麼? – nils
我有一個在每個請求中運行的對象的列表,我無法控制創建對象的位置,當我在外部文件中運行類型爲crate的實例時,它會爲我返回false。 –
然後你需要一個不同的方法。如果您無法控制加載順序,那麼依靠加載順序將會失敗。 –