閱讀945 返回首頁    go 阿裏雲 go 技術社區[雲棲]


js中的函數function

    js的function對象在調用過程中具有一個arguments的屬性,它是由腳本解釋器創建的(這也是arguments創建的唯一方式)。arguments屬性可以看作是一個Array對象,它有length屬性,可以通過序號訪問每一個參數,而且通過argument的callee屬性可以獲取對正在執行的Function對象的引用。如下:

function factorial(n){
  if(n<=n){
   return 1;
   }else{
      return n*arguments.callee(n-1);
   }
}
alert(factorial(5));

上麵使用了callee屬性完成了一個遞歸的算法。


Function的另一個屬性是caller,它指向正在調用當前函數的父函數對象。利用callee和caller屬性,可以很容易實現對堆棧的遍曆,如:

function fool(v1){
   foo2(v1,v2,v3);
}
function foo2(v1,v2){
  foo3(v1,v2,v2*v2);
}

function foo3(v1,v2,v3){
  var foo=argument.callee;
  while(foo&&(foo!=window)){
  document.writeln('<br>調用參數:<br>','-------------------------------<br>');
  
   var args=foo.argument;argn=args.length;
   for(var 1=0;i<arg;i++){
   document.writeln('args[',i,']:',args[i],'<br>');
   }
  document.writeln('<br>');
  foo=foo.caller;
  }
}
foo(5);

Function是js中一個很特殊的對象,其特殊體現在他的多重身份上,如:

//function作為類的聲明和實現
function ClassA(){
  this.prop1="prop1";
   this.prop2="prop2";
}
//function作為構造函數
var obj=new CalssA();

//輸出true,function作為類引用
alert(obj instanceof CalssA);

Function可以聲明普通函數,這和其他語言的概念是一樣的,但Function還可以用於類的聲明和實現,對象的構造函數以及類的引用。上麵的代碼中通過function關鍵字聲明了ClassA類,並通過this關鍵字聲明了兩個屬性prop1和prop2,然後在創建obj對象時,ClassA()由起到了對象構造函數的作用;最後代碼中使用instanceof關鍵字判斷obj對象是否是ClassA類的實例,此時ClassA又起到了類引用的作用。




最後更新:2017-04-03 05:40:00

  上一篇:go poj 2498 StuPId
  下一篇:go js中實現多態