javascript - 麻煩幫解釋一下,什麼叫“鉤子”?

來源:互聯網
上載者:User
麻煩幫解釋一下什麼叫“鉤子”。

回複內容:

麻煩幫解釋一下什麼叫“鉤子”。

鉤子呢,英文叫做Hook,翻譯過來應該叫做魚鉤;
舉個例子:
你在你的鑰匙上弄一條線綁著,然後線上上面弄一個鉤子,你可以把這個鑰匙掛在衣架上,也可以把這個鑰匙掛在你的窗帘上。嗯這個也許不夠生動和形象,再來一個:

在這裡,這個衣架就相當於一個鉤子,這個鉤子的作用可以把毛巾掛到那上面的掛鈎上。

這裡大概是這樣的一個意思,在程式裡來說就是你定義了一個小功能,可以在任何想用的地方掛上去。這個小功能利用鉤子掛上去,比如評論列表展示,可以是一個鉤子,在需要的地方掛上去。
這個東西和外掛程式其實差不多,但是我覺得的話,外掛程式的功能相對於鉤子來說,更複雜,鉤子的話,功能更單一更靈活。

所以,我覺得符合鉤子思想的東西就是鉤子,程式如此,生活中的東西也如此

不知道是否準確,一個具體化的說法叫回呼函數。linux核心中就有很多這樣的機制,底層用c語言的函數指標來調用函數,頂層將該指標指向某個函數,以此來達到解耦代碼的目的

"鉤子"是一種形象的叫法,在可一“放置”鉤子的地方,我們叫其為“掛載點”

我個人對鉤子的理解就是:在一個有序的步驟中的特殊位置(掛載點),插入自訂的內容。這就叫"鉤子"。

在ThinkPHP中,有前置鉤子和後置鉤子,他們用來設定在增,刪,改,查資料前後的自訂動作。

在CodeIgniter中,鉤子更為的靈活,靈活有系統執行早起的鉤子,也有系統執行之後的鉤子。非常能滿足開發人員的極客思想。

我理解的鉤子,是指在模板方法模式的父類演算法架構中隔離容易變化部分的一種方式。
比如父類的演算法架構init()中預設依次執行A操作——B操作——C操作,正常情況下它的大部分子類也都按照這個流程來執行,但如果有一個特定的子類,它不想執行B操作,那麼我們可以在父類中封裝一個鉤子invokeB,預設為true,若且唯若它為true的時候執行B操作,然後再到子類中將繼承的invokeB設定為false,這樣調用該子類的init()的時候就會跳過B操作了。

我也來湊個熱鬧。我覺得鉤子(hook)就是:

提供一個可以影響預設的(或原有的)流程(機制)的時機

通常就是:一個庫、一個架構、一個系統或一種語言,提供一個對外公開的介面,通過這個介面,使用者能夠影響庫、架構、系統或程式的行為。

至於具體實現,那是千差萬別的。舉個例子就是有同學提到了:Java中的模板方法。

最直觀的理解就是 你要訪問某個文章 然而這個文章有許可權驗證 必須要登入會員才能訪問 那麼 這個許可權驗證的過程也可以稱之為hook鉤子 簡單地說 以某個條件觸發的行為 就是鉤子

用javascript舉個栗子:
alert是js的原生函數對不對,我們想要改造alert函數,這個時候,oriAlert就是一個鉤子函數。

var oriAlert = window.alert;window.alert = function(txt){    //改造函數    oriAlert(txt);}
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.