2012-02-01 16 views
10

Đấu tranh một chút để tận dụng tốt nhất mô-đun của Node/yêu cầu()/xuất khẩu được thiết lập để thực hiện lập trình OO phù hợp. Có thực hành tốt để tạo không gian tên toàn cầu và không sử dụng xuất khẩu (như trong phát triển ứng dụng js phía máy khách) không? Vì vậy, trong mô-đun (Namespace.Constructor.js):Node.js namespacing

Namespace = Namespace || {}; 
Namespace.Constructor = function() { 
    //initialise 
} 
Namespace.Constructor.prototype.publicMethod = function() { 
    // blah blah 
} 

... và trong tập tin gọi chỉ cần sử dụng ...

requires('Namespace.Constructor'); 
var object = new Namespace.Constructor(); 
object.publicMethod(); 

Cảm ơn

+3

Sử dụng 'exports' hoặc 'module.exports'. Mô-đun của bạn đã được đặt tên không gian. Chỉ cần làm theo [các tài liệu này] (http://nodejs.org/docs/latest/api/modules.html). – nicerobot

Trả lời

16

Trong Node.js, module vị trí là không gian tên, do đó không cần phải đặt tên trong mã như bạn đã mô tả. Tôi nghĩ rằng có một số vấn đề với điều này, nhưng họ có thể quản lý được. Nút sẽ chỉ hiển thị mã và dữ liệu mà bạn đính kèm vào đối tượng module.exports.

Trong ví dụ của bạn, sử dụng như sau:

var Constructor = function() { 
    // initialize 
} 
Constructor.prototype.publicMethod = function() {} 
module.exports = Constructor; 

Và sau đó, trong mã gọi của bạn:

var Constructor = require('./path/to/constructor.js'); 
var object = new Constructor(); 
object.publicMethod(); 
+1

Nhưng nếu chúng ta không sử dụng var, toàn cục sẽ được tạo và có sẵn cho người gọi. Tại sao chúng ta cần sử dụng xuất khẩu? – hacklikecrack

+1

Để tránh va chạm tên trong không gian toàn cầu. Tất nhiên bạn có thể tạo ra hệ thống không gian tên của riêng bạn, nhưng require() hoạt động khá tốt và là tiêu chuẩn rõ ràng trong phát triển node.js. –

+7

hacklikecrack: Thiếu một var trong một mô-đun không tạo ra một toàn cầu có sẵn từ người gọi. Nút tự động kết thúc mã mô-đun của bạn trong một hàm để ngăn chặn điều đó. –