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