首先我們來看看網上apply()方法的定義:
1. apply()方法能劫持另外一個對象的方法,繼承另外一個對象的屬性
2.Function.apply(obj,args)方法能接收兩個參數
3.obj:這個對象将代替Function類裡this對象
4.args:這個是數組,它将作為參數傳給Function(args–>arguments)
1.我們使用代碼運作一下:

2. 從定義中的1、3條來講Person()繼承了obj的屬性,并且obj代替了Person()的this對象,那麼Person()中的this.sex為‘男’
3. 輸出結果正确
4. 根據定義中的第3條此時Person()中的this指向obj,obj對象隻有一個屬性 sex,那麼Person()中的this.name 應該為undefined
5. 輸出結果不為undefined,也就是說第3條是不正确的,但是根據第1條,Person()方法繼承了obj對象的sex,結果輸出為‘木木’也能說的通了。如果是這樣,Person()中的this還是指向的Person(),并沒有改變。到底Person()中的this改變沒有呢?繼續測試
6.根據定義第1條來看,隻是Person()方法繼承了obj對象的屬性,obj并沒有發生變化。obj中隻有sex屬性沒有name屬性,obj.name的輸出結果應該為undefined
7.可是結果并不是我預想的那樣,如果根據定義中的第1條,那麼不單是Person()繼承了obj的屬性,obj也繼承了Person()的屬性。但是這無法準确的解釋apply()的作用。從結果來看此時的this無論指向的是Person()和還是obj都不準确,綜合定義中的1、3條和測試結果,我認為apply()不隻是繼承obj的屬性,而且還繼承了Person()的屬性,this指向的既不是obj也不是Person(),指向的應該是繼承了Person()和obj屬性的一個新的對象。準确的來說,apply()的作用就是合并方法和對象的方法和屬性,并将方法和對象的this指向合并後的對象。
(如果這種解釋不正确,歡迎大家留言探讨)