function Shop(){}
Shop.prototype.method1=function(){
this.method2()
}
Shop.prototype.method2=function(){
return  alert(123)
}
var Sa=new Shop()
Sa.method2=function(){
alert(789)
}
Sa.method1()请问这么写,method2可以叫回调函数吗? 那个ajax中的onreadystatechange回调函数是不是就相当于这个method2?

解决方案 »

  1.   

    不是回调函数;
    shop用原型添加了两个方法method2,method1
    Sa复制了shop两个方法,接着重写了method2方法
    结果:
    Shop.method1()//原始返回123
    Sa.method1()//重写后返回789
    ===========================
    A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.简单讲就是把一个函数a当参数传入函数b,函数b执行完后再执行函数a,就是回调了。
      

  2.   

    哦 那这个Sa=new shop() 不就相当于ajax中的ajax=new XMLHttpRequest(),ajax.onreadystatechange=function(){},开发者手工重写了onreadystatechange方法,这个不是和method2道理一样吗?onreadystatechange叫回调函数,method2为啥不能叫啊?
      

  3.   

    function aa(callback){
    callback()
    }
    aa(function(){
      alert("回调")
    })
      

  4.   

    简单讲就是把一个函数a当参数传入函数b,函数b执行完后再执行函数a,就是回调了。 楼上的这句说的蛮对,也好理解。
      

  5.   


            function aa(callback) {
                var i = 1;
                alert("回调之前"+i);
                callback(i);
            }        aa(function(i) {
                alert("回调之后"+(i+1));
            });
      

  6.   

    谢谢诸位解答,可没人直接回答我这个问题:function Shop(){ 
      

    Shop.prototype.method1=function(){ 
        this.method2() 

    Shop.prototype.method2=abcfunction abc(){
        alert(123)
    }我想问abc是不是回调函数?
      

  7.   


    /**
    * @see ajax的回调函数
    * @param result 返回的结果
    * @param callBack 原来的回调函数
    */
    function ajaxCallBack(result, callBack) {
    if (null != result && result != "") {
    var returnType = result.split("\u2605")[0];
    var returnValue = result.split("\u2605")[1];
    if (returnValue == "null") {
    callBack(null);
    } else {
    var backObject = null;
    if (returnType == "string") {
    backObject = new String(returnValue);
    } else if (returnType == "boolean") {
    backObject = eval(returnValue);
    } else if (returnType == "int") {
    backObject = parseInt(returnValue);
    } else if (returnType == "float") {
    backObject = parseFloat(returnValue);
    } else if (returnType == "object" || returnType == "array" || returnType == "objectArray") {
    backObject = eval("(" + returnValue + ")");
    }
    callBack(backObject);
    }
    } else {
    callBack();
    }
    }
      

  8.   

    现在基本明白js回调函数是啥了,似乎有2种:
    第一种是传递一个函数A到另一个函数B中,并且这个函数B执行函数A。就说函数A叫做回调函数。如果没有名称,就叫做匿名回调函数,像这样:function B(callback){
      callback()
    }
    function A(){
      alert("回调")
    }
    B(A)
    第二种:回调函数就是一个自定义的函数,在发生特定的事件的时候调用来处理这个事件的函数,像这种abc是回调函数:var obj=doucment.getElementById('boxA')
    obj.onclick=abc
    function abc(){ }
    我一开始纠结在var ajax=new XMLHttpRequest()
    ajax.onreadystatechange=callback
    function callback(){
      }我觉得既然onreadystatechange方法等号后面跟一个函数就可以叫回调函数,那我同样也可以自己定义一个方法后面加一个函数,也应该叫回调函数,但却忽视了onreadystatechange本身是一个事件,不是自定义的方法。现在不知道总结的对不对,欢迎大家拍砖