我在express上创建了这个模块:
module.exports = {
myobj : {},
myfun : function(app) {
app.all('/',function (req, res, next) {
this.myobj.foo = ‘bar’;
}
}
}
但它不起作用,我收到以下错误: 无法设置未定义的属性'foo'
但是,如果我这样做,这很有效,为什么?:
module.exports = {
myobj : ‘’,
myfun : function(app) {
app.all('/',function (req, res, next) {
this.myobj = ‘bar’;
}
}
}
我不明白为什么我不能向我的对象添加属性(第一种情况)但我可以修改我的var myobj(第二种情况)。
怎么了?
谢谢!
答案 0 :(得分:1)
试试这段代码:
module.exports = {
myobj : {},
myfun : function(app) {
var that = this;
app.all('/',function (req, res, next) {
that.myobj.foo = ‘bar’;
}
}
}
在第一种情况下:this
引用回调函数:function(req, res, next){}
而不是您要导出的对象,因为myobj
未定义,并且您在尝试访问时遇到错误{{ 1}}未定义对象的属性。
在第二种情况下:您初始化foo
回调的新属性myobj
,没关系,您可以这样做,但是如果您拨打function(req, res, next) {}
然后检查myfun
将会看到它仍然是空字符串,这是因为您修改了回调函数属性而不是导出对象。