[英]Does Node.js require inheritance?
在我的server.js文件中,我包含了Underscore.js库。
var _ = require('underscore')
我有这样的路线:
// require routes
require('./routes/document');
在文档路由中,我想使用 Underscore.js。 但似乎_
变量不是继承的/在文档范围内。 这是否意味着我必须在每条所需的路线上设置_
变量? 或者有没有更聪明的方法来做到这一点?
是的,您应该在需要它可用的文件中设置 _。
或者,您可以通过删除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
至于你的具体情况:
模块在第一次加载后被缓存。 这意味着(除其他外)每次调用 require('foo') 都会返回完全相同的对象,如果它解析为相同的文件。
因此,如果在父库和 './routes/document' 中都需要('underscore'),则只会加载一个下划线模块的实例,因此。 这两个变量实际上是同一个对象。
顺便说一句,您不想在全局范围内定义变量,因为它可能会产生副作用并可能覆盖其他模块中的属性。
最后,util的模块提供了一个继承方法的子类从其原型另一个构造和继承。
据我所知,出于安全原因,Node.js 引擎“需要/收费”不同范围内的模块/file.js(我不知道具体如何)(想象一下,模块可以在需要时更改变量。那会很危险!有关此问题的更多信息:信息隐藏)。
唯一的例外是暴露在模块范围内的全局 Node.js 对象。
全局对象正是“全局”对象,您定义的没有 var 关键字的所有内容实际上都添加到该全局对象中:
foo_var = "Whatever"
意思是:
console.log(global.foo_var) // Logs "Whatever"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.