强行改变this指向
call() 改变this指向 调用call() 的时候 会直接执行原来的函数
语法:函数名.call(参数1,参数2......)
参数1:函数中this想要指向的对象
参数2:就是给原来的函数第一个形参赋值的
参数3:就是给原来的函数第二个形参赋值的
apply() 改变this指向 调用apply()的时候 会直接执行原来的函数
语法:函数名.apply(参数1,参数2)
参数1:函数中this想要指向的对象
参数2:是一个数组,数组中的数据就是给原来函数中的形参赋值
bind() 改变this指向 不直接执行函数
语法:函数名.bind(参数)
参数:函数中this想要指向的对象
返回值:跟原来的函数一样的一个新函数,只不过这个新函数中this指向发生改变
call apply bind 三个方法的联系和区别:
a:第一个参数都是指定函数内部中this的指向。
b:都可以在函数调用时传递参数。
call,bind方法需要直接传入,而apply方法需要以数组的形式传入。
c:call,apply方法是在调用之后立即执行函数,
而bind方法没有立即执行,需要将函数再执行一遍。有点闭包的味道。
let obj = { name: "张三" };
function fun(age, sex) {
console.log(this);
console.log(age);
console.log(sex);
}
// document.onclick = fun;
// fun(18);
// fun.call(obj, 28,'男');
// fun.apply(obj,[18,'女'])
// res 就是跟原来函数中代码一模一样 只不过这个res函数中的this指向obj
// let res = fun.bind(obj);
// res('李四',20);
fun.bind(obj)('李四',20)
结果: