JavaScript call()

admin發表於2018-11-12

call方法可以改變其他方法(函式)的呼叫物件,方法內的this也會指向新的呼叫物件。

此方法與apply方法功能類似,具體參閱JavaScript apply()一章節。

特別說明:apply對箭頭函式無效。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
fn.call(thisobj,arg1,arg2,...)

引數解析:

(1).fn:要被改變呼叫物件的方法或者函式。

(2).thisobj:必需,fn的新呼叫物件,fn中的this將會指向此物件。

(3).arg:可選,傳遞給fn的引數。

瀏覽器支援:

(1).IE瀏覽器支援此方法。

(2).edge瀏覽器支援此方法。

(3).谷歌瀏覽器支援此方法。

(4).opera瀏覽器支援此方法。

(5).火狐瀏覽器支援此方法。

(6).safria瀏覽器支援此方法。

程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var obj={
  webName:"螞蟻部落"
}
var webName="baidu";
function fn(){
  console.log(this.webName);
}
fn();
fn.call(obj)

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201811/12/110052mmqzstz2wwcf3hn3.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).預設狀態下,呼叫fn函式,函式中的this指向window物件,所以列印結果為"baidu"。

(2).通過call方法將fn的呼叫物件修改obj,那麼fn中的this也就指向obj,於是列印結果為"螞蟻部落"。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var obj = {
  webName:"螞蟻部落"
}
function fn(x,y){
  console.log(this.webName);
  console.log(x + y)
}
fn.call(obj, 2, 3);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201811/12/110122jllc5lqnlb4c3g53.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

程式碼分析如下:

(1).通過call方法將fn函式的呼叫物件修改obj,那麼fn中this指向obj。

(2).call方法從第二個引數開始的所有引數都是為fn傳遞的引數,也就是將引數2和3傳遞給fn。

相關文章