js理解 call( ) | apply( ) | caller( ) | callee( )

被js的这几个方法搞的this晕头转向,下定决心搞清楚;
1、call( )和apply( ):两者都可以将函数绑定到另外一个对象上去运行,只是参数的传递方式不同,两者都可以使当前函数拥有另一个对象的属性和方法,实现js下的继承:
     call( ): a.call( b[arg1,arg2....] );
      所有函数内部的this指针都会指向b,如果没有b,this指针会指向Global;
      实现了a继承的b的属性和方法;
 
     apply( ) : a.fn.apply(b , arguments);
     a的fn方法加载到b上调用,this指向b;
 
2、caller :
     在一个函数调用另一个函数时,被调用函数会自动生成一个caller属性,指向调用它的函数对象。如果该函数当前未被调用,或并非被其他函数调用,则caller为null。
 3、callee :
      当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。
由于arguments在函数被调用时才有效,因此arguments.callee在函数未调用时是不存在的(即null.callee),且解引用它会产生异常;
 可以用来递归计算,验证参数:
      var sum = function(n){
   if (n <= 0){                       
      return 1;
    }
    else
    {
      return n + arguments.callee(n - 1)
    }
       }
posted @ 2016-01-08 10:57  小七的博客  阅读(247)  评论(0编辑  收藏  举报