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