开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第23天,点击查看活动详情
什么是借用
把函数借过来使用——说白了,是代码的重复使用
实现代码的重复使用的方式
1.继承 —— 需要构造原型链的时候,从一个大分类分出小分类的时候,进行封装的时候
2.借用 —— 如果只是想要快速实现某个效果
借用的效果:
1.调用函数
2.修改函数里面的this
函数的原型对象身上有三个用于借用的方法,这三个方法任何的函数都可以直接使用
call
Function.prototype.call
作用: 借用 : 1调用函数 2 修改函数里面的this
用法:
函数名.call(新的this,函数被调用的时候所需的参数)
使用场景
1.借用构造函数继承
2.借用数组的forEach方法遍历伪数组
Array.prototype.forEach.call(伪数组,回调函数);
3.把伪数组转换为数组
Array.prototype.slice.call(伪数组,0)
apply
作用: 借用:1.调用方法,修改this
用法
函数名.apply(新的this,[参数1,参数2...])
使用场景:
1.快速实现求数组最大最小值
var arr = [随意写一些数字];
var max = Math.max.apply({},arr);// max就是数组中的最大值
bind
作用:只会修改this,而不会立刻调用函数,而是返回一个函数的副本,已经在里面把this修改了
用法
函数名.bind(新this,参数1,参数2,参数3...);
使用场景:
一般就是在修改回调函数的里面的this的时候使用 —— 使用的比较少
小总结
共同点:都可以修改this
不同点:
1.call和apply都是立刻调用方法的
2.bind不会立刻调用
3.bind的传参和call的传参是一样的
4.apply参数要求以数组的形式传递
什么时候用哪一个:
1.如果立刻调用,只能选择call或者apply,如果立刻调用,还要求一个数组的形式传递参数,就只能使用apply
2.如果是回调函数修改this,就是使用bind