劫持

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

  • 系统的内置功能的重写 重新定义官方的内置功能(函数),覆盖之前的功能,让它执行我们自己写的功能

  •  this关键字的引用劫持(让this为我们指定的对象)

  1. 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为传入的第一个实参,后面的实参为被调函数的参数

image.png

  1. 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

image.png

  1. 定义式的函数可以在设计的时候就指定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

image.png