2012-02-14 192 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 2012-02-14 14:07:58

+0

我的问题是如何在ajaxResponse中调用this.value并引用包含此代码的对象中的值。 – user1209203 2012-02-14 14:37:10

回答

1

ajaxResponse是在父函数的功能,这就是所谓的在JavaScript关闭。当闭包使用父函数中定义的变量时,该变量不能从内存中销毁,而父函数完成执行。 所以,定义一个临时变量是这样的:

var objTmp = this; 

然后你就可以在ajaxResponse使用这个变量objTmp。 或者你可以这样做:

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

虽然这会创建一个全局变量,但会破坏对象的点。 – user1209203 2012-02-14 15:19:00

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 2012-02-14 15:19:50