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状态码是指当浏览器向服务器发起请求时,服务
