首頁  >  文章  >  web前端  >  Javascript中call()方法和apply()方法的用法有哪些?(附程式碼)

Javascript中call()方法和apply()方法的用法有哪些?(附程式碼)

不言
不言原創
2018-08-01 16:35:001326瀏覽

JavaScript中apply()方法和call()方法是Function物件的方法,每個Function物件都會有一個apply()方法和一個call()方法,那麼,apply()方法和call()方法在JavaScript中的用法與作用是什麼?本文就來談談apply()方法和call()方法的用法。

apply()方法和call()方法的語法:

/*apply()方法*/
function.apply(thisObj[, argArray])
/*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

作用:借用另一個物件的方法,而不用拷貝。 (可以用來取代另一個物件呼叫一個方法,將一個函數的物件上下文從初始的上下文改變為由thisObj指定的新物件)

apply()方法和call()方法的基本用法:

function add(a,b){
  return a+b;  
}
function sub(a,b){
  return a-b;  
}
var a1 = add.apply(sub,[4,2]);  //sub调用add的方法
var a2 = sub.apply(add,[4,2]);
alert(a1);  //6     
alert(a2);  //2

/*call的用法*/
var a1 = add.call(sub,4,2);

apply()方法和call()方法實作繼承:

function Animal(name){
  this.name = name;
  this.showName = function(){
        alert(this.name);    
    }    
}

function Cat(name){
  Animal.apply(this,[name]);    
}

var cat = new Cat("咕咕");
cat.showName();

/*call的用法*/
Animal.call(this,name);

apply()方法和call()方法實作多重繼承:

    function Class10(){
      this.showSub = function(a,b){
            alert(a - b);
        }   
    }
    
    function Class11(){
      this.showAdd = function(a,b){
            alert(a + b);
        }  
    }
    
    function Class12(){
      Class10.apply(this);
      Class11.apply(this);   
      // Class10.call(this);
      //Class11.call(this);  
    }
    
    var c2 = new Class12();
    c2.showSub(3,1);    //2
    c2.showAdd(3,1);    //4

Call()方法的功能:將偽數組改成真數組

偽數組就是一個包含length屬性的json對象他不是真數組,其實都是在模擬一個集合(描述集合資料)

例如:

var json = {1:’苹果’,2:’香蕉’,3:’菠萝’,length:3}
Var arr = [‘苹果’,’香蕉’,’菠萝’]

他的特點:

#1、key都是1,2,3,4 ,5
2、他含有一個length屬性

#如何將偽數組轉為真數組

/*我们通过如下方式将其转换成数组*/
/*slice:截取数组,返回的还是数组,这里截取全部*/
var domNodes=Array.prototype.slice.call(divs);
/*这样domNodes就可以应用Array下所有方法*/

apply()方法的用法技巧:

1、Math.max 可以實現得到陣列中最大的一項:

因為Math.max不支援Math.max ([param1,param2])也就是數組,但是它支援Math.max(param1,param2...),所以可以根據apply的特徵來解決var max=Math.max.apply(null,array),這樣就輕易的可以得到一個陣列中的最大項(apply會將一個陣列轉換為一個參數接一個參數的方式傳遞給方法)。

這塊在呼叫的時候第一個參數給了null,這是因為沒有物件去呼叫這個方法,我只需要用這個方法幫我運算,得到返回的結果就行,所以直接傳遞了一個null過去。

用這個方法也可以實作得到陣列中的最小項:Math.min.apply(null,array)

2、Array.prototype.push可以實作兩個數組的合併

同樣push方法沒有提供push一個數組,但是它提供了push(param1,param2...paramN),同樣也可以用apply來轉換一下這個數組,即:

   var arr1=new Array("1","2","3");
    var arr2=new Array("4","5","6");
    Array.prototype.push.apply(arr1,arr2);    
    //得到合并后数组的长度,因为push就是返回一个数组的长度

也可以這樣理解,arr1呼叫了push方法,參數是透過apply將陣列轉換為參數清單的集合

通常在什麼情況下,可以使用apply類似Math. max等之類的特殊用法:一般在目標函數只需要n個參數列表,而不接收一個數組的形式,可以透過apply的方式巧妙地解決這個問題。

相關文章推薦:

JavaScript中的call方法和apply方法使用對比_基礎知識

javascript中call和apply方法淺談_javascript技巧

#

以上是Javascript中call()方法和apply()方法的用法有哪些?(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn