2012-02-14 8 views
1

AJAXコールバックで、myFucntionのalert()が「動作しました」をトリガーするようにしたいのですが、ajaxResponseのmyobjectオブジェクトをどのように参照できますか?オブジェクトをonreadystatechangeに渡す

function myobject(){ 

this.val="worked"; 

http.onreadystatechange =function ajaxResponse() { 
if (http.readyState == 4) { 
this.myFunction(); 
} 

http.send(null); 

} 

myobject.prototype.myFunction=function(){ 
alert("it "+this.val); 
} 
+0

あなたの質問はありますか? – sinsedrix

+0

私の質問はどのようにajaxResponseでthis.valueを呼び出すことができ、これはこのコードを含むオブジェクトの値を参照します。 – user1209203

答えて

1

ajaxResponseは、それがJavaScriptでクロージャと呼ばれています、親関数内の関数です。クロージャが親関数で定義された変数を使用する場合、この変数はメモリから破棄することはできませんが、父関数は実行を終了します。 だから、このように一時的な変数を定義します。

var objTmp = this; 

が次にあなたがajaxResponseでこの変数objTmpを使用することができます。 これは次のようにすることができます:

http.onreadystatechange = (function(objTmp){ 
         return 
          function ajaxResponse{alert(objTmp.value)} 
         })(this) 
+0

これは、グローバル変数を作成しますが、オブジェクトのポイントを破棄します。 – user1209203

2

ただ、このように、XHRオブジェクトに親オブジェクトを追加します。

http.parent = this; // Append it here 
http.onreadystatechange = function ajaxResponse() 
{ 
    if (http.readyState == 4) 
     alert(this.parent.value) // Access it here 
} 
+0

これは機能しましたが、 myobject.prototype.myFunction = function(){ alert( "it" + this.val); }次に行う場合であれば(http.readyState == 4){this.myObject.myFunction();} myobject.prototype.myObject = { コールバック:MyFunctionを(){ アラート( "それ" +この.val); } } です。 – user1209203

関連する問題