0

我有一个示例代码:

window.fbAsyncInit = function() {
   FB.init({appId: appId, status: true, cookie: true, xfbml: true});

   this.test();  
};
// Load the SDK Asynchronously
(function(d){
  var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
  js = d.createElement('script'); js.id = id; js.async = true;
  js.src = "//connect.facebook.net/en_US/all.js";
  d.getElementsByTagName('head')[0].appendChild(js);
}(document));
this.test = function() {
    alert('test');
}

当我在 FB init 上调用函数test()时结果是“ TypeError: this.test is not a function”,如何解决?

4

2 回答 2

0

范围问题,调用测试函数时去掉“this”。“This”指的是 fbAsyncInit 函数。

新代码(未经测试,但应该可以工作):

window.fbAsyncInit = function() {
   FB.init({appId: appId, status: true, cookie: true, xfbml: true});

   test();  
};
// Load the SDK Asynchronously
(function(d){
  var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
  js = d.createElement('script'); js.id = id; js.async = true;
  js.src = "//connect.facebook.net/en_US/all.js";
  d.getElementsByTagName('head')[0].appendChild(js);
}(document));
function test () {
    alert('test');
}
于 2012-11-17T14:33:28.127 回答
0

this在功能和this全局范围内是指向不同对象的链接;你可以this用它代替window它会工作。

于 2012-11-17T14:34:45.043 回答