我有一个我从一个方法调用的库函数。它需要一个带有一个参数的回调,我希望它是来自同一个对象的另一个方法。我似乎无法正确使用语法。这就是我所拥有的:
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
}
P.S。对不起,如果这篇文章做得不好(还在学习)谢谢!!!
答案 0 :(得分:0)
您已将closure
功能的引用传递给authorize
,但我认为您希望调用并将引用传递给它创建的函数。所以:
// `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}, closure() );
// Call it -----------------------------------------------^^
您可能根本不需要closure
功能,但在不了解周围代码的情况下很难说清楚。但这可能就是你所需要的:
$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);
});
答案 1 :(得分:0)
这一行:
var closure = function(token) { return function() { obj._login2(token); } }
将返回一个函数,即closure()的返回值是一个函数。
一个解决方案:
变化
var closure = function(token) { return function() { obj._login2(token); } }
到
var closure = function(token) { obj._login2(token); }