JS手冊中對call的解釋:
--------------------------
call 方法
調用一個對象的一個方法,以另一個對象替換當前對象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
參數
thisObj
可選項。將被用作當前對象的對象。
arg1, arg2, , argN
可選項。將被傳遞方法參數序列。
說明
call 方法可以用來代替另一個對象調用一個方法。
call 方法可將一個函數的物件內容從初始的上下文改變為由 thisObj 指定的新對象。
如果沒有提供 thisObj 參數,那麼 Global 對象被用作 thisObj。
-------------------------------------------
以下是例子。注釋都是自己對call的理解。
<input type="text" id="myText" value="input text">
<script>
//類
function Obj(){ this.value="對象!"; }
var value="global 變數";
//方法。作用就是使出全域變數value
function fun1(){ alert(this.value); }
window.fun1();
//alert:global 變數
//當前視窗對象調用fun1,fun1方法中的this指向的是window。
//window的value就是全域變數value。所以輸出的是“global 變數”
fun1.call(window);
//alert:global 變數
//fun1.call(window); call中傳入的對象參數還是window。和調用他的對象一樣。所以輸出的還是“global 變數”。
var txt=document.getElementById('myText');
fun1.call(txt);
//alert:input text
//call中傳入的是text對象。
//fun1.call(txt);也等於 window.fun1.call(txt); 通過call 來改變調用fun1方法的對象。
//也就是說,方法體內的this由原來指向的window改變為指向的是txt對象,
//也可以被認為fun1成了對象txt的一個方法。或者說給txt增加了一個fun1的方法。方法內執行的是輸入txt的value。alert出來的也就是txt的value
//
// txt.printTxt=function(){
// alert(this.value)
// }
// txt.printTxt();
fun1.call(new Obj());
//alert:對象!
//測試fun1的this指向的是類Obj的一個執行個體對象。alert出的Obj的屬性value值。
</script>