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);  
    }  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM