首頁 >web前端 >js教程 >javascript中call和apply方法淺談_javascript技巧

javascript中call和apply方法淺談_javascript技巧

WBOY
WBOY原創
2016-05-16 17:21:191150瀏覽

call和apply的第一個實參是要呼叫函數的母對象,它是呼叫上下文,在函數體內透過this來獲得對它的引用。
例如,如果要想以物件o的方法來呼叫函數f,可以如下的方式使用call和apply方法:

複製程式碼 程式碼如下:

  f.call(o);
  f.apply(o);

可以照著如下的程式碼:
複製程式碼 程式碼如下:
  o.m = f o.m = f.的臨時方法
  o.m();  //呼叫這個臨時方法
  delete o.m;  //將這個臨時方法刪除

來個示例吧。

複製程式碼 程式碼如下:
  function testtestn(){Lturna. this.b;
  }
   var o = {a:1, b:2};
  testFun.call(o);  //3 比〕〕〕〕〜);


  上述程式碼執行的結果皆為3,可以理解為return o.a o.b。
 考慮一個問題,如果call和apply方法的第一個實參為null或undefined為怎樣?來看下面的範例:



複製程式碼 程式碼如下:     、〜, b = 20;
  function testFun(){
    return this.a this.b;
  }
  testFun.call();
  testFun.apply();


  上述程式碼執行的結果均為30。這是因為call和apply的第一個實參如果傳入的是null或undefined,則會被全域物件取代。
 那call和apply這兩個方法有什麼差別呢?
對於call方法來說,第一個呼叫上下文實參之後的所有實參就是要傳入待呼叫函數的值。例如,以物件o的方法的形式呼叫函數f,並傳入兩個參數,就可以使用以下的程式碼:



複製程式碼 程式碼如下:  f.call(o, 1, 2);

而apply方法則將第一個實參之後的所有實參放入一個陣列內,


複製程式碼 程式碼如下:    、〜, [1, 2]);

來個範例


複製程式碼 程式碼如下:  function testFun(x, y){
    return this.a this.b x y;
  }  testFun.apply(o, [10, 20]);


 上述程式碼的執行結果為33,可以理解為 o.breturn o.breturn o.breturn o. 10 20
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn