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));
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作为类的声明和实现
function ClassA(){
this.prop1="prop1";
this.prop2="prop2";
}
//function作为构造函数
var obj=new CalssA();
//输出true,function作为类引用
alert(obj instanceof CalssA);
原文:http://blog.csdn.net/xiebaochun/article/details/38750017