JavaScript的劫持

劫持技术是一个很简单的技术

简单的来说劫持就是分为三种

1.黑客劫持网络数据包 然后暴力解码(逆向工程) 个人隐私数据窃取了

在用户的浏览器连上被访问的网站服务器,发送了HTTP请求后,运营商的路由器会首先收到此次HTTP请求,之后运营商路由器的旁路设备标记此TCP连接为HTTP协议,之后可以抢在网站服务器返回数据之前发送HTTP协议的302代码进行下载软件的劫持,浏览器收到302代码后就会跳转到错误的软件下载地址下载软件了,随后网站服务器的真正数据到达后反而会被丢弃。或者,旁路设备在标记此TCP连接为HTTP协议后,直接返回修改后的HTML代码,导致浏览器中被插入了运营商的广告,随后网站服务器的真正数据到达后最终也是被丢弃。设计到了太多不关于js的东西,就只做了解

2.系统的内置功能的重写

系统内置功能的重写就是把系统内置的功能保存到一个变量中 然后我们自己修改这个系统的内置功能,举个例子

var _log=console.log
			console.log=function  (str) {
				_log(str)
				_log("重庆小面好吃")	
			}						
			console.log("hi")
			console.log("123")
			console.log("456")

这样我们不管怎么在控制台打印,都会打印一次重庆小面好吃

3.(重点)this关键字的劫持

this关键字的说白了就是把函数调用的this劫持了,然后把这个this对象指向哦我们的参数

举个例子

call()劫持

			var obj={name:"bob",dd:function(){console.log(this)}}
			var obj2={name:"mike"}
			obj.dd.call(obj2)

 就像这样dd方法本来是属于obj的方法 this本来也应该指向obj 但是call劫持之后就相当于obj2在在调用dd方法

obj2.dd()

apply()劫持

fn.call(this, arg1, arg2);

fn.apply(this, [arg1, arg2])

区别就在于是传的参数 一个是传的数组,一个是传的变量

			function fn () {
				console.log(1)
			}
			function fn2 () {
				console.log(2)
			}
			fn.call.call(fn2)
			fn.call.call.call(fn2)

把最后的一个call(xx)this对象已经确定到了xx

fn.call是一个整体 fn.call.call都是一个整体

都是2

除了fn.call(fn2)

这个是最后去调用的fn函数

你可能感兴趣的:(javascript)