看案例不是太明白call()方法,所以去搜了下,原来它还有个类似的方法~
    ECMAScript规范给所有函数都定义了call()和apply()两个方法,call与apply的第一个参数都是需要调用的函数对象 ,在函数体内这个参数就是this的值,剩余的参数都是需要传递给函数的值,call与apply的不同就是call传的值可以 是任意的(直白说法’连续参数’),而apply传的剩余值必须为数组(直白说法’数组参数’)。
    这两个方法都是为了改变某个函数运行时的context即上下文而存在的,换句话说,就是为了改变函数体内部this的指 向(动态改变this),
    如:
    function add(a,b){return a+b}
    function sub(a,b){return a-b}
    /apply方法
    var a1 = sub.apply(add,[4,2]);
    var a2 = add.apply(sub,[4,2]);
    /
    var a1=sub.call(add.4,2);
    var a2=add.call(sub,4,2);
    输出结果:a1=2,a2=6
    怎么感觉好像一样的~ 网上找了下给出这个结果
    javascript中,某个函数的参数数量是不固定的,因此要说只用条件的话,当你的参数是明确知道数量时,用call, 而不确定的时候,用apply,然后把参数push进数组传递进去,当参数数量不确定时,函数内容也可以通过arguments这个数组来遍历所有参数。
    这个应该靠谱点吧~

    再来看下下面这个
    如:
    function fn1(){
    this.a=123;
    this.add=function(){return this.a}
    }
    function fn2(){this.a=456;}
    var f1=new fn1();
    var f2=new fn2();
    var a=f1.add.call(f2);//a输出的是456

    这里就是把f1的方法拿给分来使用,f2便可以使用f1中所有的方法,当然根据综上可以扩展出多继承,使用多个call
    便可以实现多继承
    如:
    function fn1(){this.add=function(){return this.a}}
    function fn2(){this.sub=function(){return this.a-this.b}}
    function fn3(){
    this.a=10;
    this.b=2;
    fn1.call(this);
    fn2.call(this);
    }
    var f3=new fn3();
    console.log(f3,add());//10
    console.log(f3.sub());//8

    还有种说法是this和arguments理解了,这两个就不攻自破了~