回覆列表
  • 1 # 使用者45088894266

    call和apply其實是同一個東西,區別只有引數不同,call是apply的語法糖。

    如果你願意的話,所有函式呼叫的時候,都可以使用apply,任何時候都可以用,完全不存在“不知道怎麼用”這種情況,因為只要你呼叫一個函式的時候,就可以用,任何時候,任何函式,隨便用。

    但是這樣好像沒有意義,題主希望知道的是,什麼時候才是一個恰當的場景對吧,那我們來分析一下,用call或者apply呼叫函式和直接呼叫函式有什麼區別。

    函式作用域中的“this”,就像我們文章裡的“我”一樣。語文老師告訴我們,引號我,不是我,他可以是任何人,比如是作者,可以是讀故事的人,或者是某個特定的人。

    我們通常使用的函式有兩種。一種是作為某個物件的方法,一種是作為獨立的函式。

    當作為物件方法的時候,函式中的this往往指的都是呼叫它的物件。而如果是一個獨立函式,我們通常不會在其中使用this。

    這就是為什麼題主不知道如何應用apply,因為通常我們遇到的都是上面的兩個場景,這時候確實沒有任何使用apply的必要。那什麼時候可以用apply呢?

    第一種就是這個函式作為某個物件的方法,但是卻不被這個物件呼叫。比如我們用過

    這時候的this並不是一個Array,因為需要借用Array類的方法,所以使用了call。

    另外一個場景是就是聲明瞭一個帶有this的函式,根據傳入不同的物件可能做一點不一樣的操作。

    在純粹的面向物件程式設計中,我們應該是可以繞開call來實現各種功能的,換句話說,如果js語言中並沒有這個方法,大概我們也可以正常的上班吧。

    難以理解或者無法熟練運用某個技術,一定是因為沒有遇到適合的場景。最好的途徑還是有前輩能夠拿著程式碼來告訴你,這裡用了call之後為什麼變得更好了。自己按照一直以來的程式設計思路,可能走了很久也不會走到有call的這條路上。

    如果是要做框架類的東西,或許會比較容易遇到。距離提問已經五年了,我猜題主應該已經找到答案了吧。

  • 中秋節和大豐收的關聯?
  • HPz440怎樣安裝centos系統?