0

我有这个代码,它是我的用户类的一部分。当我调用这个函数时:

user = new User();
user.regUser("john", "john@doe.com", "john123", function() { });

我得到错误

Uncaught TypeError: Object #<Database> has no method 'writeDb'

用户类中的函数:

User.prototype.regUser = function(name, email, password, cb) {
        this.db.exec("SELECT * from users WHERE user_email='"+email+"';", function(results) {
            var len = results.rows.length;
            if (typeof(cb) == 'function') {
                if (len < 1) {

                    this.name = name;
                    this.email = email;
                    this.password = password;
                    this.writeDb();

                    cb(true); // username doesn't exists

                } else {
                    cb(false); // username already exists
                }
            }
        });
    }

问题是否可能是在我的函数的嵌套函数中调用了“this”变量?因为在其他函数中没有嵌套时是有效的。我怎样才能解决这个问题?

  • 小编辑:我已经写了 this.db.writeDb() 必须是 this.writeDb() 仍然得到错误。
4

1 回答 1

2

您假设“this”对象是回调中的用户类。只需声明一个闭包变量来捕获“this”对象。尝试这个;

User.prototype.regUser = function(name, email, password, cb) {
      var user = this;
      user.db.exec("SELECT * from users WHERE user_email='"+email+"';",   function(results) {
        var len = results.rows.length;
        if (typeof(cb) == 'function') {
            if (len < 1) {

                user.name = name;
                user.email = email;
                user.password = password;
                user.db.writeDb();

                cb(true); // username doesn't exists

            } else {
                cb(false); // username already exists
            }
        }
    });
}
于 2012-10-23T15:04:52.550 回答