欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js中call()和apply()改變指針問(wèn)題的講解

 更新時(shí)間:2019年01月17日 14:24:41   作者:muzidigbig  
今天小編就為大家分享一篇關(guān)于js中call()和apply()改變指針問(wèn)題的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧

1. 每個(gè)函數(shù)都包含兩個(gè)非繼承而來(lái)的方法:call()方法和apply()方法。(天生的)

2. 相同點(diǎn):這兩個(gè)方法的作用是一樣的。

都是在特定的作用域中調(diào)用函數(shù),等于設(shè)置函數(shù)體內(nèi)this對(duì)象的值,以擴(kuò)充函數(shù)賴以運(yùn)行的作用域。

一般來(lái)說(shuō),this總是指向調(diào)用某個(gè)方法的對(duì)象,但是使用call()和apply()方法時(shí),就會(huì)改變this的指向。

call有兩個(gè)妙用:

  •           1: 繼承。
  •           2: 修改函數(shù)運(yùn)行時(shí)的this指針。

區(qū)別:call和apply的區(qū)別在于call的第二個(gè)參數(shù)可以是任意類型,而apply的第二個(gè)參數(shù)必須是數(shù)組或者arguments

<script>
  //一般來(lái)說(shuō),this總是指向調(diào)用某個(gè)方法的對(duì)象,但是使用call()和apply()方法時(shí),就會(huì)改變this的指向。
  /*
  call方法:
  語(yǔ)法:call(thisObj,arg1,arg2,……,argN)
  定義:調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象
  參數(shù)
    thisObj;可選項(xiàng),將被用作當(dāng)前對(duì)象的對(duì)象
    arg1,arg2,……,argN;可選項(xiàng),將被傳遞方法參數(shù)序列
  說(shuō)明
    call方法可以用來(lái)代替另一個(gè)對(duì)象調(diào)用一個(gè)方法。call方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛衪hisObj指定的新對(duì)象。
  
  如果沒(méi)有提供thisObj參數(shù),那么Global對(duì)象被用作thisObj
  */
  /*
  apply方法:
  語(yǔ)法:apply(thisObj,[arg1,arg2,……,argN])
  定義:應(yīng)用某一個(gè)對(duì)象的一個(gè)方法,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象
  */
  //區(qū)別:call和apply的區(qū)別在于call的第二個(gè)參數(shù)可以是任意類型,而apply的第二個(gè)參數(shù)必須是數(shù)組或者arguments
  //1.
  function add(a,b) {
    console.log(a+b);
  }
  function sub(a,b) {
    console.log(a-b);
  }
  add.call(sub,3,1);//用add來(lái)替換sub,add.call(sub,3,1)==add(3,1),結(jié)果是console.log(4);
  //2.
  function Animal(){
    this.name="Animal";
    this.showName=function(){
      alert(this.name);
    }
  }
  function Cat(){
    this.name="Cat";
  }
  var animal=new Animal();
  var cat=new Cat();
  animal.showName.call(cat);
  // 通過(guò)call或者apply方法,將原本屬于Animal對(duì)象的showName()方法交給對(duì)象cat來(lái)使用。結(jié)果為alert("Cat");
  //3.
  function Animal(name){
    this.name=name;
    this.showName=function(){
    alert(this.name);
    }
  }
  function Cat(name){
    Animal.call(this,name);
  }
  var cat=new Cat("Black Cat");
  cat.showName();
  //Animal.call(this)的意思是使用Animal對(duì)象代替this對(duì)象,那么Cat中就有了Animal的所有方法和屬性了,Cat對(duì)象就能直接調(diào)用Animal的方法和屬性了。
  //4.
  function Class10(){
    this.showSub=function(a,b){
      alert(a-b);
    }
  }
  function Class11(){
    this.showAdd=function(a,b){
      alert(a+b);
    }
  }
  function Class2(){
    Class10.call(this);
    Class11.call(this);
  }
  //使用兩個(gè)call就實(shí)現(xiàn)多繼承了。
</script>

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

最新評(píng)論