Javascript 尝试将带有参数的闭包用作回调

Javascript 尝试将带有参数的闭包用作回调,javascript,Javascript,我有一个从方法调用的库函数。它接受一个回调,其中一个参数我希望是来自同一对象的另一个方法。我似乎不能理解正确的语法。以下是我得到的: myOriginalObject.login = function() { // inside a method var obj = this; var closure = function(token) { return function() { obj._login2(token); } } $window.gapi.auth.

我有一个从方法调用的库函数。它接受一个回调,其中一个参数我希望是来自同一对象的另一个方法。我似乎不能理解正确的语法。以下是我得到的:

myOriginalObject.login = function() {
    // inside a method
    var obj = this;
    var closure = function(token) { return function() { obj._login2(token); } }
    $window.gapi.auth.authorize({"client_id": this.clientId,
                                 "immediate":false,
                                 "response_type":"token",
                                 "scope":this.scopes}, closure );       

    // .. some more code and method ends
}
myOriginalObject._login2 = function(authResult)
{
  // .. I can't get this function called by the gapi library
}

顺便说一句,如果这篇文章做得不好,很抱歉,谢谢

您正在传递对要授权的闭包函数的引用,但我认为您希望调用它并将引用传递给它创建的函数。因此:

// `token` argument here ------------------v
var closure = function() { return function(token) { obj._login2(token); } }
// not here------------^

您可能根本不需要闭包函数,但是如果不了解更多有关周围代码的信息,就很难判断是否需要闭包函数。但这可能就是你所需要的:

$window.gapi.auth.authorize({"client_id": this.clientId,
                             "immediate":false,
                             "response_type":"token",
                             "scope":this.scopes}, function(token) {
                                 obj._login2(token);
                             });
旁注:因为myOriginalObject是一个单例对象,所以不需要var obj=this;,您可以直接使用符号myOriginalObject:

$window.gapi.auth.authorize({"client_id": this.clientId,
                             "immediate":false,
                             "response_type":"token",
                             "scope":this.scopes}, function(token) {
                                 myOriginalObject._login2(token);
                             });
这一行:

var closure=functiontoken{返回函数{obj.\u login2token;}

将返回一个函数,即闭包的返回值是一个函数

一个解决方案:

改变

var closure = function(token) { return function() { obj._login2(token); } }


是的,但是。是的,这让我找到了解决办法。非常感谢你。我刚通过myOriginalObjct._login2,效果不错。我想,因为它是安格拉斯一家工厂的一部分,所以我不能这样做,但它似乎起了作用。
var closure = function(token) { return function() { obj._login2(token); } }
var closure = function(token) { obj._login2(token); }