You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Nov 30, 2024. It is now read-only.
这三个函数存在于函数的原型链上,
call
和apply
用来改变函数的this
指向,也就是执行上下文对象。bind
函数也是用来修改执行上下文对象,只是它返回一个修改后的一个新函数,不会自动执行。call
首先看一下这样的代码:
如上可以看到,如果单独去执行
fn
函数的时候,this
是指向默认执行window
对象的。当把fn
挂载到obj
上,然后通过obj
去访问的时候,fn
这时候的this
就会指向obj
了。这种情况是基本知识,应该都是知道的。那么重点就是利用这种方式来模拟call
的实现。fn
是否为函数obj
为空,这里其实可以默认为window
,默认为一个对象是为了好让fn
绑定到这个对象的某一个属性上。Symbol
创建一个不会重复的key
。fn
绑定到对象上,然后执行得到结果,删除刚添加的属性,将值返回。以上就是怎么实现
call
的思路了,至于apply
的实现,几乎就是一样的,只是因为传入的参数有所不同,所以在执行传参的时候差别,如下:bind
主要重点就是
bind
是返回一个新的函数,并且可以绑定传入参数。obj
进行一下判断复制。fn
的apply
方法修改this
指向,然后拼接两次传入的参数为一个数组。注意这里的拼接顺序。对于
bind
函数,网上还有对fn
函数为构造函数时候的情况进行判断。主要是使用判断当使用new
关键字的时候再去new fn(...args)
。小结
理解了这三个函数的作用,就可以利用
this
指向的原理去模拟这些方法,以上都用使用es6
的一些方法,代码看起来简洁不少。The text was updated successfully, but these errors were encountered: