JavaScript中的函數劫持實例詳解
函數劫持,顧名思義,即在一個函數運行之前把它劫持下來,添加我們想要的功能。當這個函數實際運行的時候,它已經不是原本的函數了,而是帶了被我們加上去的功能。這也是我們常見的鉤子函數的原理之一。
乍看之下,這很像是函數的改寫。函數的改寫也可以理解為是函數劫持的一種,但這種方式太噁心了。身為一個劫持者,在綁票獲得好處以後也應該遵守職業道德,把人原封不動地還回去,所以我們得在適當的地方把函數原本的功能給重新調用回來。
推而廣之,其實「劫持」這概念我們常常會遇到,比方說某網站被業者劫持了,在瀏覽該網站的時候會彈出業者的廣告。
舉例
現在我們來舉個簡單的例子,劫持一下alert()函數,為它增添一點小小的功能:
let warn = alertwindow.alert = (t) => { if (confirm('How are you?')) warn(t) } alert('Help me...!!!')
可以開啟開發者工具試試這個例子,你會發現只有你在confirm裡面點擊了OK,才會彈出Help me…!!!。
接下來我們把這部分的內容封裝一下,成為一個通用的函數:
const hijack = (obj, method, fun) => { let orig = obj[method] obj[method] = fun(orig) }
首先我們定義了一個hijack函數,它會先把原函數給保存下來,然後執行自訂函數,而原函數將會在自訂函數內部進行呼叫。
然後我們來劫持confirm()函數:
hijack(window, 'confirm', (orig) => { return (text) => { alert('HELP ME PLZ!!!') if (orig.call(this, text)) { alert('YOU SEEMS FINE AND I AM LEAVING, GOOD BYE!') } else { alert('HOLD ON! I AM COMING!!') } } })
這段函數的功能很簡單就不詳細說明了,直接呼叫confirm()你就知道了:
反劫持
新建一個頁面,打開你的開發者工具控制台,輸入alert,你會看到這樣的輸出:
function alert() { [native code] }
然後使用本文開頭的那段程式碼,把alert()劫持一下,再重新在控制台輸入alert,你會看到這樣的輸出:
function (t) => { if (confirm('How are you?')) warn(t) }
透過上述的例子可以知道,要看一個函數是否被劫持了,只需要直接把它印出來即可。針對系統原生的函數,[native code]即代表它是純淨無污染的。
相關推薦:
淺談javascript函數劫持[轉自xfocus]_javascript技巧
#以上是JavaScript中的函數劫持實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

js和vue的關係:1、JS作為Web開發基石;2、Vue.js作為前端框架的崛起;3、JS與Vue的互補關係;4、JS與Vue的實踐應用。

Golang是一門功能強大且高效的程式語言,可用於開發各種應用程式和服務。在Golang中,指標是一種非常重要的概念,它可以幫助我們更靈活和有效率地操作資料。指標轉換是指在不同類型之間進行指標操作的過程,本文將透過具體的實例來學習Golang中指標轉換的最佳實踐。 1.基本概念在Golang中,每個變數都有一個位址,位址就是變數在記憶體中的位置。

JavaScript中的HTTP狀態碼取得方法簡介:在進行前端開發中,我們常常需要處理與後端介面的交互,而HTTP狀態碼就是其中非常重要的一部分。了解並取得HTTP狀態碼有助於我們更好地處理介面傳回的資料。本文將介紹使用JavaScript取得HTTP狀態碼的方法,並提供具體程式碼範例。一、什麼是HTTP狀態碼HTTP狀態碼是指當瀏覽器向伺服器發起請求時,服務
