js递归函数和call()

1、递归函数

  如果一个函数在其主体中直接或间接调用其本身,则这样的函数则称为“递归函数”

function myFun(n){
    if(n == 1){
        return 1;
    }       
    return n*myFun(n-1);    
}
alert("5的阶乘为:"+myFun(5));

2、call()方法和apply()方法

  Function对象的call()方法和apply()方法可以实现像调用对象的方法一样调用函数。

  call和apply是为了动态改变this而出现的,当一个object没有某个方法,但其他的有,可以借助call或apply用其他对象的方法来操作

  call与apply的不同就是call传的值可以是任意的,而apply传的值必须为数组

  常用实例:

function add(a,b){
   alert(a+b);   
}
function sub(a,b){
   alert(a-b);
}
add.call(sub,3,1);
/*用add来替换sub
add.call(sub,3,1) == add(3,1)
所以运行结果为:alert(4)*/
    function Animal(){    
        this.name = "Animal";    
        this.showName = function(){    
            alert(this.name);    
        }    
    }    
      
    function Cat(){    
        this.name = "Cat";    
    }    
       
    var animal = new Animal();    
    var cat = new Cat();    
        
    //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。    
    //输入结果为"Cat"    
    animal.showName.call(cat,",");    
    //animal.showName.apply(cat,[]);  

实现继承

    function Animal(name){      
        this.name = name;      
        this.showName = function(){      
            alert(this.name);      
        }      
    }      
        
    function Cat(name){    
        Animal.call(this, name);    
    }      
        
    var cat = new Cat("Black Cat");     
    cat.showName();  

多重继承

    function Class10()  
    {  
        this.showSub = function(a,b)  
        {  
            alert(a-b);  
        }  
    }  
      
    function Class11()  
    {  
        this.showAdd = function(a,b)  
        {  
            alert(a+b);  
        }  
    }  
      
    function Class2()  
    {  
        Class10.call(this);  
        Class11.call(this);  
    }  
原文地址:https://www.cnblogs.com/ywang/p/5942571.html