Node.js命名空间

hac*_*ack 11 node.js

稍微努力以充分利用Node的模块/ require()/ exports设置来进行适当的OO编程.创建全局命名空间而不使用导出(如客户端js app开发中)是一种好习惯吗?所以,在模块(Namespace.Constructor.js)中:

Namespace = Namespace || {};
Namespace.Constructor = function () {
    //initialise
}
Namespace.Constructor.prototype.publicMethod = function () {
    // blah blah
}
Run Code Online (Sandbox Code Playgroud)

...并且在调用文件时只使用...

requires('Namespace.Constructor');
var object = new Namespace.Constructor();
object.publicMethod();
Run Code Online (Sandbox Code Playgroud)

谢谢

Jon*_*ols 16

在node.js中,模块位置是命名空间,因此不需要像您所描述的那样在代码中使用命名空间.我认为这有一些问题,但它们是可管理的.Node只会公开您附加到module.exports对象的代码和数据.

在您的示例中,使用以下内容:

var Constructor = function() {
  // initialize
}
Constructor.prototype.publicMethod = function() {}
module.exports = Constructor;
Run Code Online (Sandbox Code Playgroud)

然后,在您的调用代码中:

var Constructor = require('./path/to/constructor.js');
var object = new Constructor();
object.publicMethod();
Run Code Online (Sandbox Code Playgroud)

  • hacklikecrack:缺少模块中的var不会创建调用者可用的全局.Node会自动将模块代码包装在一个函数中以防止这种情况发生. (8认同)