最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript中call和apply方法淺談

 更新時間:2013年09月27日 15:27:59   作者:  
我們可以將call和apply看做是某個對象的方法,通過調(diào)用方法的形式來間接調(diào)用函數(shù)
call和apply的第一個實參是要調(diào)用函數(shù)的母對象,它是調(diào)用上下文,在函數(shù)體內(nèi)通過this來獲得對它的引用。
例如,如果要想以對象o的方法來調(diào)用函數(shù)f,可以按如下的方式使用call和apply方法:
復制代碼 代碼如下:

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

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

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

來個示例吧。
復制代碼 代碼如下:

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

  上述代碼執(zhí)行的結(jié)果均為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();

  上述代碼執(zhí)行的結(jié)果均為30。這是因為call和apply的第一個實參如果傳入的是null或者undefined,則會被全局對象代替。
 那call和apply這兩個方法有什么區(qū)別呢?
對于call方法來說,第一個調(diào)用上下文實參之后的所有實參就是要傳入待調(diào)用函數(shù)的值。比如,以對象o的方法的形式調(diào)用函數(shù)f,并傳入兩個參數(shù),就可以使用如下的代碼:
復制代碼 代碼如下:

  f.call(o, 1, 2);

而apply方法則將第一個實參之后的所有實參放入一個數(shù)組內(nèi),
復制代碼 代碼如下:

  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]);

 上述代碼的執(zhí)行結(jié)果為33,可以理解為 return o.a + o.b + 10 + 20

相關(guān)文章

最新評論

龙游县| 乌拉特中旗| 方山县| 鱼台县| 泰兴市| 桑日县| 来凤县| 楚雄市| 抚顺市| 连云港市| 内乡县| 石泉县| 安泽县| 渭南市| 万荣县| 汤原县| 龙南县| 万年县| 垫江县| 远安县| 电白县| 南川市| 和平县| 确山县| 莱西市| 汉沽区| 岳普湖县| 大连市| 汕尾市| 江城| 青龙| 荔浦县| 江油市| 青铜峡市| 五华县| 洛南县| 正定县| 西丰县| 吉木乃县| 株洲县| 灵川县|