国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript中call和apply方法淺談

2024-05-06 15:52:26
字體:
來源:轉載
供稿:網友
我們可以將call和apply看做是某個對象的方法,通過調用方法的形式來間接調用函數

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

復制代碼 代碼如下:


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


可以按如下的代碼來理解:

復制代碼 代碼如下:


  o.m = f;  //將f存儲為o的臨時方法
  o.m();  //調用這個臨時方法
  delete o.m;  //將這個臨時方法刪除


來個示例吧。

復制代碼 代碼如下:


  function testFun(){
    return this.a + this.b;
  }
   var o = {a:1, b:2};
  testFun.call(o);  //3
  testFun.apply(o);  //3


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

復制代碼 代碼如下:


  var a = 10, 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方法則將第一個實參之后的所有實參放入一個數組內,

復制代碼 代碼如下:


  f.apply(o, [1, 2]);


來個例子吧

復制代碼 代碼如下:


  function testFun(x, y){
    return this.a + this.b + x + y;
  }
  var o = {a:1, b:2};
  testFun.call(o, 10, 20);
  testFun.apply(o, [10, 20]);


 上述代碼的執行結果為33,可以理解為 return o.a + o.b + 10 + 20
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 甘南县| 双流县| 海原县| 元朗区| 比如县| 怀安县| 深泽县| 水城县| 保亭| 馆陶县| 醴陵市| 怀化市| 廉江市| 建瓯市| 浦江县| 额尔古纳市| 义乌市| 和平县| 武威市| 成都市| 行唐县| 朝阳县| 邵东县| 遂溪县| 北碚区| 密云县| 海盐县| 红原县| 正蓝旗| 高密市| 定远县| 北流市| 吕梁市| 横山县| 鹤峰县| 扎兰屯市| 迁西县| 高唐县| 河间市| 全州县| 广安市|