宝哥软件园

本机js代码可以实现调用和绑定吗

编辑:宝哥软件园 来源:互联网 时间:2021-08-21

Js手工实现的调用和绑定是一个谎言

网上有很多关于实现调用和绑定的原理的文章,但是调用和绑定的原理真的像他们说的那样吗?今天,让我推翻这些所谓的“原则”,揭开谎言下的真相。

首先,看看在互联网上实现呼叫:

//手写call function . prototype . my call=function(context){ context=context | | window;context.fn=thisconst args=[.参数]。切片(1);const result=context.fn(.args);//执行fn时,上下文上下文已经修改,不是预期的调用delete context.fn返回结果;}函数show(){ console . log(this);} show . my call({ haha 3360122 });上述代码的执行结果是

如你所见,以这种方式实现的呼叫不是我们所期望的。

与函数附带的调用相比:

show . call({ haha 3360122 })的结果是

不难发现,根据函数mycall,在执行context.fn(.args),因此执行fn时使用的上下文是修改后的上下文,这导致与预期结果相差甚远。

核心

而且,往更深层次去想,召唤从来不是这样实现的(或者类似这样的东西)。call是浏览器底层语言封装的函数,用js模仿是绝对不可能的,也是没有必要的。

综上所述,js模拟了调用和绑定的原理,没有触及底层。这样的模仿只能用于娱乐,没有实用价值。Bind类似于call,这里不再赘述。

更多资讯
游戏推荐
更多+