构造函数Function的原型上分别有call,apply,bind这三个方法,可改变函数中this的指向。从而实现一些业务功能。这三个方法是如何改变this的?下面通过手写call,apply,bind的方式一一进行实现。
1.手写call方法
步骤:
1.1 定义myCall方法
1.2 设置this并返回原函数
1.3 接收剩余参数并返回结果
1.4 使用symbol对this的设置进行优化
运行结果如下:
从中可以发现:函数func自调用时,其内部的this指向window,通过myCall方法,可改变func函数内部的this,使其指向传入的对象。
2. 手写apply方法
2.1 定义myApply方法
2.2 设置this并调用原函数
2.3 接收参数并返回结果
运行结果如下:
myApply函数的入参中,第一个传入的是this指向的对象,通过数组的方式传入原函数的入参。myApply和apply函数一样,一经调用后,就直接执行原函数。
3. 手写bind函数
3.1 定义bind方法
3.2 返回绑定this的新函数
3.3 合并绑定和新传入的参数
执行结果:
myBind函数和以上两个函数不同点在于,1:myBind函数调用后,不会立即执行,而是返回一个新的函数,需执行新函数后,才会改版原始函数中的this。2.调用myBind函数时,可以传入部分入参,在执行返回的新函数时,也可以传入一些入参。
下一章我将介绍一下,如何手写promise,从而让大家对于Promise构造函数以及他的一些应用有更多的了解