目录
1、call
2、apply
3、bind
4、三者异同
1、call
call 函数调用 :1、让函数执行
2、改变函数this指向
参数: 第一个参数是this指 向,第二个参数开始传递给函数的实参
函数名.call(this指向,参数,参数 . . . )
console.log(Object.prototype.toString()) // [object Object]console.log(Object.prototype.toString.call(123)) // [object Number]console.log(Object.prototype.toString.call([])) // [object Array]
2、apply
apply 函数调用 :1、让函数执行
2、改变函数this指向
参数:第一个参数是this指向,第二个参数是一个数组,数组里放的是传递给函数的实参
console.log(0bject.prototype.toString()) // [object 0bject]
console.log(0bject.prototype.toString.apply(123))//[object Number]
console.log(0bject.prototype.toString.apply([])) / / [object Array]
3、bind
bind函数作用 : 改变函数this指向
参数:第一个参数是this指向,第二个参数开始就是实际的参数
bind返回值一个新函数(改变this指向之后的函数),不会立即调用
let obj = { name: 'longge', year: 12 }function fn(x, y) {console.log(this)return x + y}fn(1, 3)const res = fn.bind(obj, 1)const r = res(5)console.log(r)
4、三者异同
相同点:
call ,apply,bind都可以改变this指向,让函数执行
接收的第一个参数都是this要指向的对象
都可以利用后续的参数传参
不同点:
call和apply对函数都是立即调用的,而bind不会立即调用函数,bind返回的是改变this指向之后的函数
call的参数是用逗号隔开的,apply是接收数组作为参数