在我的server.js我包括下划线库。node.js需要继承吗?
var _ = require('underscore')
我有我的路线是这样的:
// require routes
require('./routes/document');
在文件路径,我想用下划线。但似乎_ var没有被继承/在文档范围内。这是否意味着我必须在每个必需路线上设置_ var?还是有更聪明的方法来做到这一点?
谢谢。
在我的server.js我包括下划线库。node.js需要继承吗?
var _ = require('underscore')
我有我的路线是这样的:
// require routes
require('./routes/document');
在文件路径,我想用下划线。但似乎_ var没有被继承/在文档范围内。这是否意味着我必须在每个必需路线上设置_ var?还是有更聪明的方法来做到这一点?
谢谢。
是的,你应该在需要它可用的文件中设置_。
或者,您可以通过删除var
部件将其放到全局范围中。
_ = require('underscore');
require('./routes/document'); // _ will be visible in document as well
检查node.js模块文档,其中require()被彻底解释。
http://nodejs.org/docs/v0.4.5/api/modules.html
至于你的具体情况:
“模块是他们第一次加载后缓存,这意味着(除其他事项外)每次调用需要(‘富’)将得到完全返回相同的对象,如果它将解析为相同的文件。“
因此,如果您在父库和'./routes/document'中都需要('underscore'),则只会加载下划线模块的一个实例,因此,这两个vars实际上都是同一个对象。
顺便说一下,您不希望在全局范围中定义变量,因为它可能会产生副作用并可能覆盖其他模块中的属性。
最后,util的模块提供了一个继承方法子类另一个构造并从其继承原型。
'_'是一个通用的实用程序库。如果你使用,你可以在整个代码集中使用它。它用于“增强”JavaScript。我认为将它包含在全局中是有效的,否则我会在所有single_ node.js文件中“要求”它。在大多数情况下,是应该避免的。 – Raynos 2011-04-09 19:18:31
@Raynos我明白这是一个通用库。无论所需模块如何,我的答案都是一般形式。不过,无论如何,我不会扩大全球范围。 :-) – pdeschen 2011-04-09 20:36:56
你如何避免在你的所有文件中写入require(“global-common”);'' (假设你在每个文件中都包含了这样的内容) – Raynos 2011-04-09 20:47:30
据我所知Node.js的引擎“要求/费用”,在不同的范围模块/ file.js(我不知道究竟是如何),出于安全原因(想象一个模块可能会改变所需的变量,这将是危险的!,关于这个问题的更多信息http://en.wikipedia.org/wiki/Information_hiding)。
唯一的例外是暴露在模块范围内的全局对象http://nodejs.org/api/globals.html。
一个全局对象,恰恰是客体“全球性”,和您定义的一切,而不var关键字居然被添加到全局对象:
foo_var =“不管”
意味着:
console.log(global.foo_var)//记录“无论”
如果您使用'global。_ = require(“underscore”);'那么意思就会变得更加明显,并且对于你是否忘记了'var'语句没有“怀疑”。 – Raynos 2011-04-09 19:19:00
删除'var'会将它置于模块范围内而不是全局范围。 – Raynos 2011-06-22 08:46:51
@Raynos“模块范围”是什么意思?这是否意味着只有该模块以及该模块需要的所有模块才能访问它? – MiniGod 2012-10-04 00:32:32