-
黑客劫持网络数据包 然后暴力解码(逆向工程) 个人隐私数据窃取了
-
系统的内置功能的重写 重新定义官方的内置功能(函数),覆盖之前的功能,让它执行我们自己写的功能
-
this关键字的引用劫持(让this为我们指定的对象)
- call方法
var obj={name:"karen",say:function(str,arg2){console.log(this.name,str,arg2)}}
var obj2={name:"jack"}
var obj3={name:"marry"}
obj.say.call(obj2) //相当于是obj2在调用say方法,obj2把obj劫持了
obj.say.call(obj3,12,77)//相当于传入的实参在调对象,this为传入的第一个实参,后面的实参为被调函数的参数
- apply方法(与call只是传入实参的方法不同)
var obj={name:"karen",say:function(arg1,arg2){console.log(this.name,arg1,arg2,arguments)}}
var obj2={name:"jack"}
var obj3={name:"marry"}
obj.say.apply(obj2,[10,20])
obj.say.apply(obj3,[100,200])
obj.say.apply(obj3,[100,200,80,90])//把实参放进数组中传递,空数组代表没实参F
- 定义式的函数可以在设计的时候就指定this
var obj2 = { name: "jack"}
var obj = {
name: "karen",
say: function () {
console.log(this)
}.bind(obj2) //bind里的参数是指定的this,确定了就不能改变
}
obj.say()
var obj3 = {
name: "marry"
}
obj.say.call(obj3) //bind的this是obj2优先级比call高,所以this还是obj2