天天看點

深入探讨apply()方法的作用

首先我們來看看網上apply()方法的定義:

1. apply()方法能劫持另外一個對象的方法,繼承另外一個對象的屬性

2.Function.apply(obj,args)方法能接收兩個參數

3.obj:這個對象将代替Function類裡this對象

4.args:這個是數組,它将作為參數傳給Function(args–>arguments)

1.我們使用代碼運作一下:

深入探讨apply()方法的作用

2. 從定義中的1、3條來講Person()繼承了obj的屬性,并且obj代替了Person()的this對象,那麼Person()中的this.sex為‘男’

深入探讨apply()方法的作用

3. 輸出結果正确

深入探讨apply()方法的作用

4. 根據定義中的第3條此時Person()中的this指向obj,obj對象隻有一個屬性 sex,那麼Person()中的this.name 應該為undefined

深入探讨apply()方法的作用

5. 輸出結果不為undefined,也就是說第3條是不正确的,但是根據第1條,Person()方法繼承了obj對象的sex,結果輸出為‘木木’也能說的通了。如果是這樣,Person()中的this還是指向的Person(),并沒有改變。到底Person()中的this改變沒有呢?繼續測試

深入探讨apply()方法的作用

6.根據定義第1條來看,隻是Person()方法繼承了obj對象的屬性,obj并沒有發生變化。obj中隻有sex屬性沒有name屬性,obj.name的輸出結果應該為undefined

深入探讨apply()方法的作用

7.可是結果并不是我預想的那樣,如果根據定義中的第1條,那麼不單是Person()繼承了obj的屬性,obj也繼承了Person()的屬性。但是這無法準确的解釋apply()的作用。從結果來看此時的this無論指向的是Person()和還是obj都不準确,綜合定義中的1、3條和測試結果,我認為apply()不隻是繼承obj的屬性,而且還繼承了Person()的屬性,this指向的既不是obj也不是Person(),指向的應該是繼承了Person()和obj屬性的一個新的對象。準确的來說,apply()的作用就是合并方法和對象的方法和屬性,并将方法和對象的this指向合并後的對象。

(如果這種解釋不正确,歡迎大家留言探讨)