国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 涿州市| 江北区| 孙吴县| 昌宁县| 阜阳市| 泽普县| 莲花县| 奉化市| 昭通市| 枝江市| 永川市| 新宁县| 福鼎市| 陵川县| 聂荣县| 休宁县| 北辰区| 罗江县| 全椒县| 宜昌市| 南川市| 吉隆县| 巩留县| 衡阳县| 子长县| 稷山县| 齐河县| 万州区| 新邵县| 横峰县| 开封市| 南汇区| 甘南县| 前郭尔| 肃南| 平顺县| 沧州市| 凤庆县| 全椒县| 汕头市| 岢岚县|