这篇文章给大家分享的是有关原生js代码能不能实现call和bind的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。js手动实现call和bind都是谎言网上有很多关于说自己实现ca
这篇文章给大家分享的是有关原生js代码能不能实现call和bind的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
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类似,这里就不赘述了。
感谢各位的阅读!关于“原生js代码能不能实现call和bind”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
--结束END--
本文标题: 原生js代码能不能实现call和bind
本文链接: https://www.lsjlt.com/news/71049.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0