首先我們要知道,JS中函數調用共有四種方法。call()就是其中一種。我先簡單的的說明以下四種方法:
我們先定義一個函數:
function test(){
/**do something**/
}
1)第一種,也就是最常見的調用方法:
test();
2)第二種:對象調用
我們需要把定義的函數放到一個對象裏面(obj)
var obj={
test:function (){
/**do something**/
}
}
調用:
a.test();
3)第三種:構造函數調用
var tmp = new test();
4)第四種:使用call()或者applay()
這種方法調用的時候必須傳遞一個參數,只要不空着即可。
test.call(null)
其實,以上調用方式,隱含的傳遞了一個變量:this。
有點面向對象基礎的人都知道,this是一個“指針”,對於js來說,this指向了方法的作用域。而call()的作用,恰恰就是改變這個作用域(this)。也就是call(null)中必須的那個參數成爲了新的this。
再打個比方,call()就像現實生活中的打電話,首先打電話前要撥號,這個號碼就相當於this,必須有號碼纔有可能撥通電話。而撥打不同的號碼,即call(null)的參數值不同,接電話的人(作用域)也不同。而給接電話方傳遞的信息可以通過call(null,param,param,param....)的其他不必須參數傳遞,接電話的人也可以通過函數的return回覆消息!