Javascript nodejs如何将父对象作用域到mysql查询匿名回调

Javascript nodejs如何将父对象作用域到mysql查询匿名回调,javascript,mysql,node.js,Javascript,Mysql,Node.js,我是node.js新手,还没有完全了解匿名函数的作用域。我用几个方法声明了一个对象。在我的方法中,我首先从mysql池获得一个mysql连接,然后对该连接进行查询。现在我想调用对象的一个方法。在阅读了作用域和绑定之后,我最终得到了以下代码 我想知道以下是坏习惯还是好习惯,是否有更好的模式来实现这一点 function myclass() {} myclass.prototype.dosomthing = function () {} myclass.prototype.init = functi

我是node.js新手,还没有完全了解匿名函数的作用域。我用几个方法声明了一个对象。在我的方法中,我首先从mysql池获得一个mysql连接,然后对该连接进行查询。现在我想调用对象的一个方法。在阅读了作用域和绑定之后,我最终得到了以下代码

我想知道以下是坏习惯还是好习惯,是否有更好的模式来实现这一点

function myclass() {}
myclass.prototype.dosomthing = function () {}
myclass.prototype.init = function() {
    pool.getConnection(function(err,connection)){
        this.dosomthing();
        connection.query("sql_statement", function(err,rows){
            this.dosomething();
        }.bind(this));
    }.bind(this));
}

谢谢你的专业知识

您拥有的功能很好,尽管它确实涉及到创建不必要的函数对象(
bind
创建并返回一个新函数)

作为替代方案,只需使用您关闭的变量:

function myclass() {}
myclass.prototype.dosomthing = function () {}
myclass.prototype.init = function() {
    var self = this;                                   // Remember `this`
    pool.getConnection(function(err,connection)){
        self.dosomthing();                             // Use it
        connection.query("sql_statement", function(err,rows){
            self.dosomething();                        // Use it
        });
    });
};
我在上面使用了
self
,但通常我会根据对象的实际情况选择名称。例如,如果
myclass
Foo
,我可能会使用
thisFoo
或类似名称


旁注:JavaScript中压倒性的惯例是,要用作构造函数的函数使用大写字母命名。因此,
MyClass
而不是
MyClass

可能是问这个问题的更好地方