function add(a,b) 

    alert(a+b); 

function sub(a,b) 

    alert(a-b); 
} add.call(sub,3,1);  // 结果是4==================================
function Class1() 

    this.name = "class1";     this.showNam = function() 
    { 
        alert(this.name); 
    } 
} function Class2() 

    this.name = "class2"; 
} var c1 = new Class1(); 
var c2 = new Class2(); c1.showNam.call(c2);  // 结果是class2
==========================================
两个之间是不是有点矛盾,总感觉第一个结果应该是2`````````````````

解决方案 »

  1.   

    第一个的结果是4没错,call的使用你理解错了。
         函数.call(this, 参数1,参数2, ...)
    add(函数).call(sub(this),3(参数1), 1(参数2))这里有一篇关于call和apply使用的详解,可以去看下,别人写的
    http://longxzq-126-com.iteye.com/blog/1044319
      

  2.   

    你对call的用法理解错了。。
    call是用来执行函数
    他第一个参是用来修改函数里面的this上下文,后面的参数是传进函数里面的实参,如
    var obj = {};
    function fn(name){
       this.name = name
    }
    fn.call(obj, 123);
    alert(obj.name);//123