众所周知在js中this的指向是可以改变的,而call、apply、bind都是可以做到的,那么我们今天就来讲讲他们的用法以及区别
1.call方法
let o = {
name:'zhangsan'
}
function fn(a,b){
console.log(this.name) //---zhangsan
console.log(a+b) //---5
return a+b
}
fn.call(o,2,3)
console.log(fn.call(o,2,3)) // ---5
call最基本的用法就是函数式调用,它相当于调用了这个函数,返回值为函数的返回值,第一个参数为函数运行你需要指定的this,后面的参数为函数本身的传参,所有的参数用逗号隔开
2.apply方法
let o = {
name:'zhangsan'
}
function fn(a,b){
console.log(this.name) //---zhangsan
console.log(a+b) //---5
return a+b
}
fn.apply(o,[2,3])
console.log(fn.apply(o,[2,3])) // ---5
apply方法也是函数式调用,返回值也是函数的返回值,和call不同的是他的第二个参数也就是函数本身的参数必须是数组
3.bind方法
let o = {
name:'zhangsan'
}
function fn(a,b){
console.log(this.name)
console.log(a+b)
return a+b
}
let fn1 = fn.bind(o,2,3)// ---函数体
fn1() // 5
bind的使用方法和call类似,区别是bind不会调用函数