1. 程式人生 > >淺談javascript中的call與apply方法

淺談javascript中的call與apply方法

分享 .cn ima his 修改 images 一個數 作用 undefine

  call方法與apply方法都是為了改變函數體內部this的指向。

  call方法與apply方法,這二者的作用完全一樣,只是接受參數的方式不太一樣。

  apply()方法:

  Function.apply(obj,args)

  obj將代替Function裏的this對象。

  args表示一個數組或者類數組。apply方法把這個集合中的元素作為參數傳遞給被調用的函數

  call()方法中的第一個參數與apply方法一樣,只不過第二個參數則是一個參數列表。

  這裏有一點要強調的是,在非嚴格模式下,當我們第一個參數傳遞為null或undefined時,函數體內的this會指向默認的宿主對象,在瀏覽器中則是window

  技術分享

  下面來舉一個call與apply方法的小例子。

  技術分享

  這個例子也許比較簡單,再來舉另外一個例子:

  技術分享

  再來說另外一個知識點。曾經我以為arguments是一個數組,可是今天我才發現,我錯了,arguments其實是一個類數組,這裏用實例來說明。

  技術分享

  可以看出arguments並不具有push方法。

  那麽什麽是類數組呢?類數組具有以下條件:

  (1)、具有length屬性。

  (2)、按索引方式存儲數據。

  (3)、不具有數組的push、pop等方法。

  如果這裏非要使用push方法,我們可以使用call或者apply方法,那麽上面的例子可以稍加修改。

  技術分享

  

  總結:

  (1)、每個函數都包含兩個非繼承而來的方法,即call()方法與apply()方法。

  (2)、call()方法與apply()方法作用相同,都是在特定的作用域中調用函數。

  (3)、接收參數方面不同,apply()接收兩個參數,一個是函數運行的作用域(this),另一個是參數數組。而call()方法第一個參數與apply()方法相同,但傳遞給函數的參數必須列舉出來。

淺談javascript中的call與apply方法