当我将函数传递给mongoose时,它似乎不再引用this
。有没有更好的方法来解决这个问题?由于长度原因,所有功能都被简化。我无法编辑函数getUsernameForId
以获取其他参数。
我上课了:
var class = new function() {
this.func1 = function(data) {
return data + "test";
}
this.func2 = function(data) {
var next = function(username) {
return this.func1(username); // THIS THROWS undefined is not a function
}
mongoose.getUsernameForId(1, func3);
}
}
mongoose是另一个这样的类:
var getUsernameForId = function(id, callback) {
user_model.findOne({"id": id}, function(err, user) {
if(err) {
throw err;
}
callback(user.username);
});
}
如何解决undefined is not a function error
。我不想重复代码,因为func1实际上很长。
答案 0 :(得分:1)
从您的代码中不清楚如何使用next
,但如果您需要使用正确的this
调用它,则可以尝试使用Function.prototype.bind
方法:
this.func2 = function(data) {
var next = function(username) {
return this.func1(username);
}.bind(this);
mongoose.getUsernameForId(1, func3);
}
我认为您简化了帖子的代码,next
在现实中做了更多的事情。但如果它确实只返回this.func1
的结果,那么你可以缩短它:
var next = this.func1.bind(this);