我在这里要做的是从同一对象的context
函数中访问context.settings
属性(或更具体地说是ready
)。我不确定这样做的正确语法是什么。
这是代码:
module.exports = {
context: {
settings: require('./settings')
},
listen: function(callback) {
listen(context.settings.http.port);
callback(null);
},
ready: function (err) {
if (err)
{
throw err;
}
console.log("Ready and listening at http://localhost:" + context.settings.http.port);
}
};
只是为了澄清,我指的是console.log("Ready and listening at http://localhost:" + context.settings.http.port);
编辑:更多上下文(ha)
我确实试过了this.context.settings.http.port
,但我得到了
TypeError: Cannot read property 'settings' of undefined
。
以下是settings.js
的内容,只是为了确定......
module.exports = {
db: {
host: '127.0.0.1',
port: 27017,
name: 'jsblogdemo'
},
http: {
port: 3000
}
};
谢谢!
答案 0 :(得分:2)
另一种可能性是:
module.exports = (function() {
var context = {
settings: require('./settings')
},
listen = function(callback) {
listen(context.settings.http.port);
callback(null);
},
ready = function (err) {
if (err)
{
throw err;
}
console.log("Ready and listening at http://localhost:" +
context.settings.http.port);
};
return {
// context: context, // needed?
listen: listen,
ready: ready
};
}());
然后这些函数可以对context
对象进行本地访问,而不必担心如何调用它们。如果您愿意,context
对象可以完全保密。
答案 1 :(得分:1)
如果它是一个单一的静态对象,你可以这样做:
module.exports.context.settings
如果您想要永久绑定this
,请使用.bind()
。
module.exports = {
context: {
settings: require('./settings')
}
}
module.exports.listen = function(callback) {
listen(this.context.settings.http.port);
callback(null);
}.bind(module.exports);
module.exports.ready = function (err) {
if (err) {
throw err;
}
console.log("Ready and listening at http://localhost:" + this.context.settings.http.port);
}.bind(module.exports);
答案 2 :(得分:0)
只要方法没有被call
或apply
绑定到另一个上下文,this
就会引用当前的对象上下文。例如,使用:
console.log(this.context.settings.http.port);
打印侦听端口。