2016-09-16 20 views
8

Tôi thấy mô hình này trong những ngày thi nodeJS, nơi mà trong chúng ta có đoạn mã sau cho mô-đun của tôi:ES6 Class và module.exports

class Foo { 
    bar() { 
    console.log('bar'); 
    } 
} 
module.exports = Foo; 

Sau đó, khi tôi một yêu cầu và cuối cùng nói mới để tạo ra một thể hiện của lớp.

var Foo = require(./foo); 
var myFoo = new Foo(); 
myFoo.bar(); 

Mẫu này theo tôi sẽ tiếp tục tạo nhiều phiên bản lớp Foo, mọi lúc mọi nơi được gọi.

Mẫu khác có thể là thứ tôi đang sử dụng cho vị trí trong foo.js của mình.

module.exports = { 
    bar: function() { 
    console.log('bar'); 
    } 
}; 

Và sau đó tôi chỉ yêu cầu và thanh cuộc gọi.

var foo = require(./foo); 
foo.bar(); 

Câu hỏi hai hành vi này sẽ giống nhau không? Mô hình thứ hai có tiếp tục tạo đối tượng mọi lúc tôi yêu cầu và gọi thanh trên đối tượng không?

Không phải là tạo mẫu đơn trong ý tưởng hay trong trường hợp 1 vì chúng tôi đã quen với các ngôn ngữ khác, trong đó chúng tôi tiếp tục phân phát cùng một trường hợp nếu nó đã được tạo một lần?

+0

bạn đang sử dụng ES6 để đảm bảo rằng, rất ít trình duyệt hỗ trợ tính năng này. –

+0

Mục đích là chạy trong nodeJS chứ không phải trong trình duyệt. –

Trả lời

8

Mẫu này theo tôi sẽ tiếp tục tạo nhiều phiên bản của lớp Foo, mọi lúc được gọi.

Vâng, đó là mục đích. Mặc dù new Foo(); chỉ được thực hiện một lần trong ví dụ của bạn.

hai hành vi này có giống nhau không?

số

mô hình thứ hai sẽ tiếp tục tạo các đối tượng mỗi lần tôi yêu cầu và thanh cuộc gọi trên đối tượng?

No. require() cuộc gọi được lưu trong bộ nhớ cache, chúng trả về cùng một mô-đun mỗi lần.

Không tạo mẫu đơn lẻ là ý tưởng hay không?

Không, hiếm khi là một ý tưởng hay nếu nó chứa bất kỳ trạng thái nào. Ví dụ của bạn không, nhưng ở đâu class es được sử dụng trong Node.js chúng thường làm.

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