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

スコープの問題。テスト関数を呼び出すときに「これ」を削除します。「これ」は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 に答える