JavaScript——劫持

概念:

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

劫持方法有以下几种:

1. 黑客劫持

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

2. 系统内置功能的重写

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

            var _log = console.log
			console.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 = n1
					var height = n2
					console.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 = n1
					var height = n2
					console.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 = n1
					var height = n2
					console.log(this.name)
					console.log(age)
					console.log(height)
				}.bind(obj)
			}
			obj2.fun(21, 180)

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z_小张同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值