call, apply,bind的区别
相同点:都可以用来改变this指向
不同点:
call, apply:传参方式不同;
call从第二个参数开始都是传给函数的;
apply只有两个参数,第二个参数是数组,数组中的值都是传给函数。
call与apply改变函数的this指向后会立即执行
bind是改变函数的this指向并返回这个函数,并不会立即执行
call与apply的返回值是函数的执行结果,bind的返回值是改变this指向的拷贝
举例:
var person = { names: 'Anne', age: '23' } var sayHi = function (gender, hobbit) { console.log(`我是${this.names},今年${this.age},爱好${hobbit},欢迎你的关注^_^`) } sayHi.call(person, 23, '前端开发') var person1 = { names: 'Anne1', age: '23' } var sayHi1 = function (gender, hobbit) { console.log(`我是${this.names},今年${this.age},爱好${hobbit},欢迎你的关注^_^`) } sayHi1.apply(person1, [23, '吃吃喝喝^_^']) var person2 = { names: 'Anne2', age: '23' } var sayHi2 = function (gender, hobbit) { console.log(`我是${this.names},今年${this.age},爱好${hobbit},欢迎你的关注^_^`) } sayHi2.bind(person2, 23, '旅游')()
call, apply适用场景:
看参数数量,参数越多,最好用apply,将参数放入数组中,进而函数调用,参数少的话,call就行了