扩展知识——JS的劫持技术

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

这里不作说明,感兴趣的自己了解

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

例如:

<script>
            var _log=console.log
			console.log=function  (str) {
				_log(str)
				//把hello发送给后台
				_log("我执行了就代表发送给后台了")	
			}						
			console.log("hello")
//控制台打印了hello和我执行了就代表发送给后台了
</script>

3、this关键字的引用劫持

1、call()方法,相当于偷取别人的方法

例如:

<script>
    var obj={name: "karen" ,say:function( ){console.log(this.name)}}
    var obj2={name : "jack"}
    obj.say.call(obj2)//相当于是obj2在调用say方法
    //打印jack
</script>

2、apply()方法,与call()方法功能一样,只是填入的数据装在数组中。

代码展示两者差别:

<script>
     var obj={name: "karen" ,say:function(str1,str2){console.log(this.name,str1,str2)}}
    var obj2={name : "jack"}
    obj.say.call(obj2,10,20)//"jack" 10 20
    obj.say.apply(obj2,[10,20])//"jack" 10 20
    //两个方法结果相同,可以清楚的看到apply传的实参是数组,但是实际打印的并不是,所以是在只是将每个数据放在数组内。
</script>

特殊点注意:运用窃取技术,数字也能获取到方法

<script>
    var arr=[10,230,40,6,2]
    var maxnum=Math.max.apply(0,arr)// 相当于假装0也有max方法
    //0.max(10,230,40,6,2)==>230
    console.log(maxnum)//230
</script>

3、bind()在函数定义时,事先就绑定其调用时候的调用者。

例如:

<script>
      var obj2={name:"jack"}
		  var obj={
			  name:"karen",
			  say:function(){
				  console.log(this)
			  }.bind(obj2) //事先将这个方法指定为obj2调用
		  }		  
		  obj.say() //{name:"jack"}
		  var obj3={name:"marry"}
		  obj.say.call(obj3) //{name:"jack"}
		  obj.say.apply(obj3,[])//{name:"jack"}
</script>

总结

根据官方的源代码推出一些规律

            1.所有的函数对象都有call方法---Function.prototype 有call方法

            2.obj.say.call(obj2) 运行的函数是say函数(哪个函数调call方法就是哪个函数运行)

            3.obj.say.call(obj2) 调用这个函数的对象是obj2(obj2调用say函数)

已知所有函数都有call方法,所以call函数也有call方法,进一步提升

<script>
            function fn () {
				console.log(1)
			}
			function fn2 () {
				console.log(2)
			}			
			fn.call.call(fn2) //打印2

        /*
        解析:
            fn.call是一个函数它有call方法
			fn.call引用了一个函数 这个函数运行
			fn.call是一个函数这个函数是谁调用的? fn2
        */
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值