猫鼬传递类函数

时间:2015-04-04 21:11:23

标签: javascript node.js mongodb mongoose

当我将函数传递给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实际上很长。

1 个答案:

答案 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);