js中的三个借用方法

163 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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