概念:

函数劫持,顾名思义,即在一个函数运行之前把它劫持下来,添加我们想要的功能。当这个函数实际运行的时候,它已经不是原本的函数了,而是带上了被我们添加上去的功能。这也是我们常见的钩子函数的原理之一。

劫持方法有以下几种:

1. 黑客劫持

就是劫持网络数据包  ,然后暴力解码(逆向工程) , 窃取个人隐私数据  (此种方法感兴趣可以网上自学)

2. 系统内置功能的重写

就是将系统内置函数功能修改为自己想要实现的功能;也就是系统内置函数的改写

            var _log = console.logconsole.log = function(str) {_log(str + " xiao zhang tong xue")}console.log("hello")

比如上面就是通过对console.log方法的重写,来实现无论用console.log方法来打印什么,打印出来的结果都会加上" xiao zhang tong xue"这个字符串。

3. this关键字的引用劫持

就是通过函数的一些特殊方法来自己指定函数的调用者

1.  this的劫持1 —— call()方法

            var obj = {name: "kang",fun: function(n1, n2) {var age = n1var height = n2console.log(this.name)console.log(age)console.log(height)}}var obj2 = {name: "xiao zhang"}obj.fun.call(obj2, 21, 180)

上述就是通过函数的call方法将对象obj中fun方法的调用者改写为对象obj2,也就是将fun方法中的this指向改为obj2,所以最终打印出来的this.name就是obj2的name: xiao zhang。

2.  this的劫持2 —— apply() 方法

            var obj = {name: "kang",fun: function(n1, n2) {var age = n1var height = n2console.log(this.name)console.log(age)console.log(height)}}var obj2 = {name: "xiao zhang"}obj.fun.apply(obj2,[21,180])

apply()方法和call()方法的作用和用法基本一致,唯一的区别是call方法的参数是直接放进去,用逗号隔开,而apply方法的所有参数必须放在一个数组中再传入。

这种方法也可以用来比较纯数字数组中的元素的最大值和最小值:

            var arr = [10,230,40,6,2,5,3]var maxnum = Math.max.apply(arr,arr) //相当于arr.max(10,230,40,6,2,5,3)var minnum = Math.min.apply(arr,arr)//相当于arr.min(10,230,40,6,2,5,3)console.log("max number = " + maxnum)console.log("min number = " + minnum)

3.  this的劫持3 —— bind()方法

            var obj = {name: "xiao zhang"}var obj2 = {name: "kang",fun: function(n1, n2) {var age = n1var height = n2console.log(this.name)console.log(age)console.log(height)}.bind(obj)}obj2.fun(21, 180)

bind()方法就是在函数设计的时候就指定函数的调用者,也就是指定函数中this的指向;其参数传入形式和call方法一样,是直接传入参数。

JavaScript——劫持相关推荐

  1. 【web-攻击用户】(9.4)跨域捕获数据——通过注入HTML捕获数据、注入CSS捕获数据、JavaScript劫持

    目录 跨域捕获数据 1.1.简介: 1.2.通过注入HTML捕获数据 简介: 示例: 1.3.通过注入CSS捕获数据 简述: 1.4.JavaScript劫持 简述: 函数回调 JSON 变量分配 E ...

  2. 20个将 JavaScript 用到极致的网站

    浏览器正变得越来越强大,上面有各种丰富的功能可以供开发者选择,一些在几年前几乎难以想象的功能都已经一一实现.有了这些新功能,开发者现在能够开发出 更精细.更复杂.更有想象力的用户界面了.这为网站开发扫 ...

  3. JavaScript/Ajax/JQuery知识点(BOM/DOM/ScriptEngine/JS引擎),JSCore

    捋顺JavaScript底层知识,重点讲解如原型.作用域.执行上下文.变量对象.this.闭包.按值传递.call.apply.bind.new.继承等难点概念??   JS中的继承?JS的原型模式, ...

  4. dns劫持广告原理及解决办法、dns劫持广告怎么办

    DNS 广告劫持(属于DNS污染) 其实这不是一个新概念了,在几年前,中国一些不讲道德的运营商,尤其是地方运营商就开始捕捉用户浏览器的访问记录,然后根据不同用户的访问行为,有 选择地往用户访问的网页里 ...

  5. DNS 广告劫持(属于DNS污染)

    其实这不是一个新概念了,在几年前,中国一些不讲道德的运营商,尤其是地方运营商就开始捕捉用户浏览器的访问记录,然后根据不同用户的访问行为,有 选择地往用户访问的网页里面推送广告.因为运营商掌握着DNS主 ...

  6. 分享一下:2011回顾:20个将JavaScript推到极致的网站(转)

    对于浏览器上的开发者来说,2011年又是相当精彩的一年.web开发者Phil Hawksworth在这篇文章中总结了web 上经典的JavaScript用法. 那些喜欢冒险体验前沿技术的开发者现在应该 ...

  7. ajax在Xss中的利用,XSS高级利用

    点击阅读 利用 xss 的 javascript 劫持 一个 xss 漏洞示例页面 1 2 3 4 5 6 7 8 9 10 $xss = @$_GET['xss']; if($xss!==null) ...

  8. 一篇文章带你详解 HTTP 协议之报文首部及字段详解(中)

    在上一篇中,我们已经讲解了一到五的内容,还没看过的可以先看, 下面接着讲剩余内容: 六.HTTP 报文首部之首部字段(重点分析) 七.HTTP 响应状态码(重点分析) 八.HTTP 报文实体 九.与 ...

  9. (chap6 Http首部) 为Cookie服务的首部字段

    Cookie的工作机制是用户识别及状态管理.Web 网站为了管理用户的状态会通过Web浏览器,把一些数据临时写入用户的计算机内.接着当用户访问该Web网站时,可通过通信方式取回之前发放的Cookie. ...

最新文章

  1. NLP 解决方案是如何被深度学习改写的?
  2. Python高级网络编程系列之第二篇
  3. linux配置caffe环境,最全caffe安装踩坑记录(Anaconda,nvidia-docker,linux编译)
  4. 每天一个linux命令(9):touch 命令
  5. org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [xx]
  6. APUE读书笔记-12线程控制-04同步属性
  7. 几种常用的JS类定义方法
  8. 应对无协议脱欧 葡萄牙机场将为英籍旅客设快速通道
  9. 蓝桥杯第三届省赛JAVA真题----取球博弈
  10. 1.安装flink-1.12.2
  11. 《Algorithms》Comparable 实现插入排序
  12. Nginx常见问题(优化)
  13. NSGA-II 算法详解
  14. VS2013添加反编译工具-ILDasm
  15. 大会回顾丨游戏用户体验优化如何实践,看大咖怎么说(附PPT下载)
  16. 传音控股再度携手联合国难民署 驰援非洲儿童教育事业
  17. 微信开发者工具测试小程序
  18. C语言实现物品竞拍管理系统
  19. 使用IPC扫描器进行网络扫描
  20. 超级隐蔽的小说阅读器

热门文章

  1. Redis配置成windows服务方法
  2. 感知损失(perceptual loss)详解
  3. 电影推荐 - 实习生
  4. 厦门大学计算机保研学校,郑炜-厦门大学计算机科学系
  5. OutputDebugString完美封装
  6. 7年java水平_7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷
  7. 并发编程实战-MESI缓存一致性协议
  8. 助力战“疫”,主“力”生产:伊利的战“疫”平衡术
  9. 【UE4】动画插入{角色移动、死亡}(混合空间,状态机)
  10. 7.12每日股市晚评