【发布时间】:2014-08-15 00:35:59
【问题描述】:
我正在构建一些 node.js 模块,并且我想将一些库推送到这个对象中
在这个场景中,我有
app.js
var api = require('./scripts/api.js');
var oauth = require('./scripts/oauth.js');
var db = require('./scripts/db.js')
var libraries = {
api : api,
db : db,
oauth : oauth,
}
var modules = require('./scripts/module.js');
modules.init(app, libraries);
模块.js
module.exports = {
init : function(app,libraries) {
for (key in libraries) {
if (libraries.hasOwnProperty(key)) {
this[key] = libraries[key]
}
}
this.oauth.init(app,libraries);
}
}
api.js
module.exports = {
init : function(app, libraries) {
for (key in libraries) {
if (libraries.hasOwnProperty(key)) {
this[key] = libraries[key]
}
}
app.get('/api/linkedin/posts', function (req, res) {
//get the credentials
var userid = req.session.user_id;
var credentials = '';
getCredentials('linkedin',userid)
.then(function(result) {
this.db.store(credentials = JSON.parse(result))
})
});
},
}
它工作正常,但是我希望发生的不是将它推到模块对象本身上。将其推送到对象范围,这样我就不必将 this.library.function() 添加到所有内容中。这样我就可以直接调用 oauth.init() 访问库了,有什么好的方法吗?
我想要完成的是产生与我执行以下操作相同的效果,我只是想让这些引导方法变得神奇
模块.js
var api = {}
var oauth = {}
module.exports = {
init : function(app,libraries) {
api = libraries.api
oauth = libraries.oauth
oauth.init(app,libraries);
}
}
这是一个演示问题的小提琴http://jsbin.com/cadejukijudu/1/edit
【问题讨论】:
-
你能展示一下你是如何调用的吗?
-
@cgatian,我想要一种将变量从 init 中绑定到对象范围内的方法,就像我在模块上方完成了 var oauth = {} 和 var api = {} 一样。导出,然后从 init 中分配值。我已经更新了问题
-
那么你是想避免api.init()、oauth.init()吗?
-
@cgatian 不,我很好,我想避免放置它。在每次调用 this.oauth this.api 之类的库之前,我只想调用 oauth.init() api.init() 而不是 this.oauth.init()
-
对象没有作用域,只有函数有,而且你不能以编程方式访问它们。相关:Add variable to a functions scope,JS class without constant reference to “this” for member access
标签: javascript node.js