DDR爱好者之家 Design By 杰米
js手动实现call和bind都是谎言
网上有很多关于说自己实现call和bind的原理的文章,然而call和bind的原理真如他们所说的那样吗?今天就让我来推翻这些所谓的”原理“,揭开谎言下的真相。
首先看看网上对call的实现:
// 手写 call Function.prototype.mycall = function (context) { context = context || window; context.fn = this; const args = [...arguments].slice(1); const result = context.fn(...args); // 执行fn时上下文context已被修改,不是我们所期望的call delete context.fn; return result; } function show() { console.log(this); } show.mycall({haha:122});
以上代码的执行结果是
如你所见,这样实现的call并不是我们所期望的那样。
对比于函数自带的call:
show.call({haha:122})
其结果为
分析其原因不难发现,根据函数mycall,执行context.fn(...args)之前修改了上下文context,所以执行fn时所使用的上下文是修改后的上下文,导致与预期结果相差甚远。
核心
而且,往更深的层次去思考,call绝不是这样(或类似这样)实现的,call是底层语言为浏览器封装好的函数,是绝对不能也没必要用js强行模仿的。
综上,js模仿call和bind绝对没有get到底层原理,这样的模仿只能用于娱乐而已,没有实际价值。bind和call类似,这里就不赘述了。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2024年04月24日
2024年04月24日
- 梁汉文.2001-MUSIC.IS.THE.ANSWER【华星】【WAV+CUE】
- 物华弥新果树双管瓶厉害吗 果树双管瓶培养建议分享
- 物华弥新玉琮王厉害吗 玉琮王培养建议分享
- 物华弥新金瓯永固杯厉害吗 金瓯永固杯培养建议分享
- Hires]勃拉姆斯:悲剧序曲HarvestehuderSinfonieorchesterHamburg,ChristianKunert,PietroMassa
- 发烧名盘1983-邓丽君-《淡淡幽情》[低速原抓WAV+CUE]
- MedwynGoodall经典巨作《女巫医7遗失的旋律》[WAV]
- 博主分享部分游戏特色开始界面:你心中的前4名是?
- “3Q大战”14年后 周鸿祎、马化腾罕见握手:相逢一笑
- 《完蛋》浩浩妈演员COS怀孕美杜莎 一口一个萧炎哥哥
- 张靓颖《倾听》[WAV分轨 24bit/96khz][2.2G]
- 林志炫《一个人的样子》[WAV分轨][494M]
- 马良《往后余生》[WAV+CUE][392M]
- 万芳.2020-给你们Dear.All【何乐音乐】【WAV+CUE】
- 左小祖咒.2023-我爱南京【FLAC分轨】