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

首頁(yè) > 編程 > JavaScript > 正文

javascript中call和apply方法淺談

2019-11-20 21:56:21
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
call和apply的第一個(gè)實(shí)參是要調(diào)用函數(shù)的母對(duì)象,它是調(diào)用上下文,在函數(shù)體內(nèi)通過(guò)this來(lái)獲得對(duì)它的引用。
例如,如果要想以對(duì)象o的方法來(lái)調(diào)用函數(shù)f,可以按如下的方式使用call和apply方法:
復(fù)制代碼 代碼如下:

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

可以按如下的代碼來(lái)理解:
復(fù)制代碼 代碼如下:

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

來(lái)個(gè)示例吧。
復(fù)制代碼 代碼如下:

  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。
 考慮一個(gè)問(wèn)題,如果call和apply方法的第一個(gè)實(shí)參為null或者undefined為怎樣?來(lái)看下面的一個(gè)例子:
復(fù)制代碼 代碼如下:

  var a = 10, b = 20;
  function testFun(){
    return this.a + this.b;
  }
  testFun.call();
  testFun.apply();

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

  f.call(o, 1, 2);

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

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

來(lái)個(gè)例子吧
復(fù)制代碼 代碼如下:

  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
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南京市| 基隆市| 军事| 抚宁县| 调兵山市| 冀州市| 鄂托克前旗| 久治县| 剑阁县| 和硕县| 东宁县| 武城县| 玛纳斯县| 德保县| 房产| 通渭县| 油尖旺区| 固始县| 山东省| 河曲县| 普兰店市| 台北市| 新宁县| 贺兰县| 东海县| 綦江县| 滦平县| 康定县| 来凤县| 永兴县| 手游| 钟祥市| 南江县| 泰兴市| 永福县| 梁平县| 巧家县| 年辖:市辖区| 金沙县| 岐山县| 丘北县|