node.js需要inheritance吗?
在我的server.js我包括下划线库。
var _ = require('underscore')
我有这样的路线:
// require routes require('./routes/document');
在文档path中,我想使用下划线。 但似乎_ var没有被inheritance/在文档范围内。 这是否意味着我必须在每个需要的路线上设置_ 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
至于你的具体情况:
“模块在第一次被加载之后被caching,这意味着(除其他之外),每次调用require('foo')将返回完全相同的对象,如果它parsing为相同的文件。
因此,如果您在父库和“./routes/document”中都需要('下划线'),则只会加载下划线模块的一个实例,因此这两个variables实际上是相同的对象。
顺便说一句,你不想在全局范围中定义variables,因为它可能会产生副作用,并可能覆盖其他模块的属性。
最后,util模块提供了inheritance方法来inheritance另一个构造函数,并inheritance其原型。
据我所知,node.js引擎“需要/收费”一个模块/ file.js在一个不同的范围(我不知道如何),出于安全原因(想象一个模块可以改变这是必需的variables,会是危险的!,关于这个问题的更多信息http://en.wikipedia.org/wiki/Information_hiding )。
唯一的例外是暴露在模块范围内的全局对象http://nodejs.org/api/globals.html 。
一个全局对象,正是对象“全局”,并且你没有var关键字定义的所有东西实际上都被添加到了全局对象中:
foo_var =“无论”
意思是:
console.log(global.foo_var)//logging“无论”