溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在JavaScript中使用call()和apply()改變指針

發(fā)布時間:2021-05-26 10:56:54 來源:億速云 閱讀:122 作者:Leah 欄目:web開發(fā)

這篇文章給大家介紹怎么在JavaScript中使用call()和apply()改變指針,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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

2. 相同點:這兩個方法的作用是一樣的。

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

一般來說,this總是指向調(diào)用某個方法的對象,但是使用call()和apply()方法時,就會改變this的指向。

call有兩個妙用:

  •           1: 繼承。

  •           2: 修改函數(shù)運行時的this指針。

怎么在JavaScript中使用call()和apply()改變指針

怎么在JavaScript中使用call()和apply()改變指針

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

<script>
  //一般來說,this總是指向調(diào)用某個方法的對象,但是使用call()和apply()方法時,就會改變this的指向。
  /*
  call方法:
  語法:call(thisObj,arg1,arg2,……,argN)
  定義:調(diào)用一個對象的一個方法,以另一個對象替換當(dāng)前對象
  參數(shù)
    thisObj;可選項,將被用作當(dāng)前對象的對象
    arg1,arg2,……,argN;可選項,將被傳遞方法參數(shù)序列
  說明
    call方法可以用來代替另一個對象調(diào)用一個方法。call方法可將一個函數(shù)的對象上下文從初始的上下文改變?yōu)橛衪hisObj指定的新對象。
  
  如果沒有提供thisObj參數(shù),那么Global對象被用作thisObj
  */
  /*
  apply方法:
  語法:apply(thisObj,[arg1,arg2,……,argN])
  定義:應(yīng)用某一個對象的一個方法,用另一個對象替換當(dāng)前對象
  */
  //區(qū)別:call和apply的區(qū)別在于call的第二個參數(shù)可以是任意類型,而apply的第二個參數(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來替換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);
  // 通過call或者apply方法,將原本屬于Animal對象的showName()方法交給對象cat來使用。結(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對象代替this對象,那么Cat中就有了Animal的所有方法和屬性了,Cat對象就能直接調(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);
  }
  //使用兩個call就實現(xiàn)多繼承了。
</script>

javascript是一種什么語言

javascript是一種動態(tài)類型、弱類型的語言,基于對象和事件驅(qū)動并具有相對安全性并廣泛用于客戶端網(wǎng)頁開發(fā)的腳本語言,同時也是一種廣泛用于客戶端Web開發(fā)的腳本語言。它主要用來給HTML網(wǎng)頁添加動態(tài)功能,現(xiàn)在JavaScript也可被用于網(wǎng)絡(luò)服務(wù)器,如Node.js。

關(guān)于怎么在JavaScript中使用call()和apply()改變指針就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI