2016-06-15 13 views
5

Cách tốt nhất để kiểm tra thừa kế trong nodej là gì?Kiểm tra thừa kế trong nodejs

Tôi đang cố gắng sử dụng instanceof trong trường hợp của một lớp học của mô-đun khác kế thừa một lớp cho mô-đun này.

tập tin a.js

class A{ 

    } 

    class B extends A{ 

    } 

    var b = new B(); 

    b instanceof A ///this work 
    global.c instanceof A //this doesn't work 

    module.exports = A; 

tập tin c.js

var A = require("./a"); 

class C extends A{ 

} 

global.c = new C(); 
+0

'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

+0

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. –

+1

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. –

Trả lời

2

Đó 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 
+0

tôi đã chuyển baseclass sang một tệp khác và hoạt động, cảm ơn –

Các vấn đề liên quan