call、apply、bind方法作用都是手动修改函数内部的this值指向。
call和apply方法的区别:
// this 比较灵活,可以任意的变化
// call apply bind 三种方法, 手动指定this的值
// call(我们要修改的对象, 参数1,参数2,参数3,。。。。)
// apply(我们要修改的对象, [参数1,参数2,参数3,。。。])
const obj = { address: '北京', age: 24 }
// 函数也是对象 new Function(),他也有自己的一些属性和方法
function fn(x, y) { console.log(this,x,y); // 没有return 所以 返回值就是 undeinfed }
const res = fn()
const res1 = fn.call(obj, 11, 22)
const res2 = fn.apply(obj, [11,22])
console.log(res, res1, res2);
// call ,apply 的区别
// 都是立即调用
// 参数 : call的是 是逗号分隔, apply参数是数组
// 返回值 : 返回值就是 普通函数的返回值
bind方法:
// bind不会调用函数,返回一个被修改过this的新函数
// bind(被修改的this值, 参数1,参数2,参数3,。。。。。)
const obj = { address: '北京' }
function fn(x, y) {
console.log('函数调用了没有哦:', this, x,y);
}
// 下面两个 直接调用函数,返回值就是普通函数调用的返回值
// fn.call()
// fn.apply()
// bind 不会调用函数, 返回值是被改造过this以后的新函数
const res = fn.bind(obj, 11, 22)
console.log(res);
res()