劫持有以下几种:
1.网络劫持技术:反编码 逆向工程
2.网页内部的劫持:插件脚本
3.方法劫持:把A对象的方法让B对象调用,A方法执行内部的this指向改变
这里主要说明第三种方法劫持
call、apply用法示例:
<script>
var obj2 = {
name: "jack"
}
var obj1 = {
name: "karen",
say: function(arg1, arg2) {
console.log(this.name, arg1, arg2)
}
}
obj1.say() //karen
obj1.say.call(obj2,100,2090) //jack,100,2090
obj1.say.apply(obj2,[200,300])//jack,100,2090
</script>
bind方法:
<script>
var obj3 = {
name: "marry"
}
function fn () {
console.log(this) //marry
}.bind(obj3);
</script>
要注意的是方法不能直接调用bind方法,否则会报错如:function(){}.bind()
正确格式应该是(function(){}).bind()或 let fn = function() {} fn.bind()