Đó là vì vấn đề tải! Khi bạn nạp lớp C, nó yêu cầu lớp A và nó được chạy trước khi C được định nghĩa.
Tôi đã thử bản thân mình, nếu tôi đã làm như bạn đã đề cập và yêu cầu cả hai lớp, sự so sánh thứ hai không thành công.
Tuy nhiên này hoạt động:
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();
Phương pháp chính
require('services/c');
const a = require('services/a');
const aInst = new a();
aInst.callMeLaterAligator();
có đầu ra
true
true
Để hiểu rõ hơn về những gì đang diễn, tôi đã tạo ra ví dụ này
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');
Có đầu ra này
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
Nếu bạn thay đổi nó để yêu cầu "a" trước, sau đó C không được tải ở tất cả
server.js thay đổi:
require('services/a');
Có đầu ra này
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' có được định nghĩa nơi bạn sử dụng không? Nhìn vào mã của bạn, nó sẽ không có vẻ như vậy. Điều gì sẽ xảy ra nếu bạn di chuyển 'global.c instanceof A' vào cuối' c.js'? – nils
tôi có một danh sách các đối tượng chạy trong mọi yêu cầu và tôi không thể kiểm soát nơi đối tượng được tạo khi tôi chạy thể hiện của một kiểu được phân loại trong tệp bên ngoài, nó trả về false cho tôi. –
Bạn sẽ cần một cách tiếp cận khác.Nếu bạn không thể kiểm soát thứ tự tải thì việc phụ thuộc vào thứ tự tải sẽ thất bại. –