改变this指向的三个方法
函数方法 有3个 1 call 2 apply 3bind(ES5新增)
//call apply bind 都可以改变this指向
//其中 call和apply改变时是在函数执行的时候改变 bind改变时是在函数定义的时候改变
//定义一个函数实现两个数相加
function demo(a, b) {
console.log(this);
return a + b;
}
//改变this指向 第一个参数是你指定的this
var result = demo.call({
name: 1
}, 1, 2);
console.log(result);
//返回值是上面函数定义的返回值 且使用call的同时 call执行函数
//call方法有两个作用 1改变this指向(第一个参数) 2传递原函数所需的参数(剩余参数) 以逗号的格式分隔
//2.apply
//改变this指向 第一个参数是你指定的this 第二个参数是数组 数组里面是传递的参数
var result1 = demo.apply({
name: 2
}, [2, 3]);
console.log(result1);
//使用apply方法的同时会执行函数
//apply方法有两个作用 1.改变this指向(第一个参数) 2.传递原函数所需的参数 (第二个参数,数组)
//3.bind
//调用的时候不执行原函数
var demo1 = demo.bind({
name: 3
}, 5, 9)
demo(); //调用demo时发现this并没有改变 说明bind没有改变原函数中的this
//因为bind是返回了一个新的函数
demo1();
var result2 = demo1(2, 3);
console.log(result2);
//总结 bind有两个作用:1返回一个新的函数 改变这个新函数中的this 2预传参数
//预传参数之后 就算调用的时候有传递新的参数 也会以之前预传的参数为准
//求一个数组中的最大值
var arr = [1, 44, -9, 5, 26, 233, 54, 99];
//Math.max(1,44,5,-9,56,233,53,99)
let max = Math.max.apply("", arr)
console.log(max);
//求一个数组中的最小值
let min = Math.min.apply("", arr)
console.log(min);
总结:1、call方法在调用的时候会执行函数 第一个参数是this的指向 第二个参数以及后面的参数都是需要传的参数 返回值是原函数中定义的返回值
2、apply方法在调用的时候也会执行函数 第一个参数是this的指向 第二个参数是数组 其中是需要传递的参数 返回值是原函数中定义的返回值
3、bind方法在调用的时候不会执行函数 第一个参数是this的指向 第二个参数以及后面的参数都是需要传的参数 返回值是一个新的函数