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