var URL = paramObject.URL;
var XHRTool = new XHRToolKit(URL, function (result) {   //result之前没有任何定义赋值。
        onReceiveData(result);
    });var XHRToolKit = function (pURL, pSendResultFunc) {
    var URL = pURL;
    var sendResultFunc = pSendResultFunc; var receiveXHRResponse = function(){
        if (XHRObj.status == 200) {
            alert("Good XHR response");
            sendResultFunc(true);
        }
        else {
            alert("Bad XHR response.");
            sendResultFunc(false);
        }
    }
}var onReceiveData = function (bSuccess) {
 if (bSuccess) {
        alert("onReceiveData("+bSuccess+")");
}
else
     alert("null");
}我JAVA用得比较多,js这种写法有点不适应,XHRToolKit明明是一个类,URL是实参,有值,result之前没有定义,这的function是定义吗,还是什么,而且onReceiveData(result)不返回任何值,也未对result赋值。
我只有一种猜测了:先将 function (result) 作为实参进到类里进行调用,但即便这样,也不会直接调用receiveXHRResponse。。思路太乱了,还望高手指点。

解决方案 »

  1.   

    你看看XHRToolKit对这个回调函数的处理,例如下面这个例子,运行一下你就明白了
      <SCRIPT LANGUAGE="JavaScript">
      <!--
    function obj(url,callback){
    this.url=url;
    this.exec=function(){
    if(typeof(callback)=="function"){
    callback(url,"第二个参数","第三个参数"); //对象中的回调函数设置3个参数
    }
    }
    } var a=new obj("http://www.google.com",function(url,p2,p3){
    alert("p1:"+url+" p2:"+p2+" p3:"+p3);
    }); a.exec();  </SCRIPT>
      

  2.   

    result之前没有定义var XHRTool = new XHRToolKit(URL, function (result) {  //result之前没有任何定义赋值。 
            onReceiveData(result); 
        }); 第2个参数是个function      只是定义一个函数   还没有执行    既然没有执行  result没直又怎么样var XHRToolKit = function (pURL, pSendResultFunc) { 
        ............. 
        var sendResultFunc = pSendResultFunc; 
    .............
    }
    这里  变量就引用了  外面传来的function  也就是
    function (result) {onReceiveData(result); }然后下面有
    sendResultFunc(true);     and       sendResultFunc(false);
    true 和 false 不就相当于result的直吗
      

  3.   

    关键receiveXHRResponse是类XHRToolKit里的一个函数,在类XHRToolkit被实例化的时候,它还不会去调用receiveXHRResponse函数。那那个 function (result) 里的result就还是没有值。可能是我结构没写好,重发一遍:
    //XHRToolKit.jsvar XHRToolKit = function (pURL, pSendResultFunc) {
        var URL = pURL;
        var sendResultFunc = pSendResultFunc;
     var receiveXHRResponse = function(){
           if (XHRObj.status == 200) {
                alert("Good XHR response");
                sendResultFunc(true);
            }
            else {
                alert("Bad XHR response.");
                sendResultFunc(false);
            }
        }
    }//CategoryMgr.jsvar CategoryMgr = function (paramObject) {
        var XHRTool = new XHRToolKit(URL, function (result) {
          onReceiveData(result);
        });var onReceiveData = function (bSuccess) { 
    if (bSuccess) { 
            alert("onReceiveData("+bSuccess+")"); 

    else 
        alert("null"); 
    } }
      

  4.   

    关键receiveXHRResponse是类XHRToolKit里的一个函数,在类XHRToolkit被实例化的时候,它还不会去调用receiveXHRResponse函数。那又如何
    js里面有闭包的
      

  5.   

    sundotLei 能给我解释下那个函数是怎么调用的吗,我觉得你给我的那个函数很有启发。url是个全局变量吧。
      

  6.   


    url不是全局变量,只是一个属性,当然上面的例子中应该改为this.url,这样更清楚
    callback(this.url,"第二个参数","第三个参数");实际上这个过程就是一个回调的过程,包括回调函数的声明,传递,调用. 即把一个function当成一个参数传递给方法,让这个方法去执行,
      

  7.   

    result就相当于java中的形参啊,只不过javascript中不需要写类型