Ben*_*Ben 5 javascript node.js
我一直在我的node.js模块中使用一个模式,这对我来说是显而易见的,我认为它一定有问题,或者我会看到更多的人这样做.为了保留模块全局的私有变量,我只需将它们作为属性附加到模块对象上.像这样:
module.exports = {
init: function() {
module.someClient = initializeSomethingHere()
},
someMethod: function(done) {
module.someClient.doSomething(done)
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎比我这样的东西更好......
var someClient;
module.exports = {
init: function() {
someClient = initializeSomethingHere()
},
someMethod: function(done) {
someClient.doSomething(done)
}
}
Run Code Online (Sandbox Code Playgroud)
...因为在第二个示例中,您需要var someClient在文件顶部进行搜索,以确保var在init方法中故意省略关键字.我从未见过这种模式在其他地方使用过,所以我想知道我是否遗漏了一些不太理想的东西.
思考?
我想到了一些可能的缺点。
1) 从技术上讲,在模块外部访问和修改这些属性是可能的,但前提是对模块本身的引用在模块外部可用。module.exports = module;通过自己的导出(最简单的例子)使模块可用的东西会暴露它们。
2) 您可能会与内置属性或将来尚不存在的内置属性发生命名冲突(这会导致您的代码在未来版本的 Node.js 中崩溃)。这可能会带来很大的问题并且很难调试。目前模块对象的内置属性是:children, exports, filename, id, loaded, paths,和parent。
因为在第二个示例中,您需要在文件顶部搜索 var someClient,以确保在 init 方法中有意省略 var 关键字。
如果这是原因,您可以使用不是module. 例如,通过添加var private = {};到每个文件的顶部,然后使用private.someClient而不是module.someClient.
另外'use strict';,意外遗漏var是一个错误,而不是意外的全局。
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |