最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

原生js代码能实现call和bind吗

来源:懂视网 责编:小采 时间:2020-11-27 21:52:57
文档

原生js代码能实现call和bind吗

原生js代码能实现call和bind吗:js手动实现call和bind都是谎言 网上有很多关于说自己实现call和bind的原理的文章,然而call和bind的原理真如他们所说的那样吗?今天就让我来推翻这些所谓的原理,揭开谎言下的真相。 首先看看网上对call的实现: // 手写 call Function
推荐度:
导读原生js代码能实现call和bind吗:js手动实现call和bind都是谎言 网上有很多关于说自己实现call和bind的原理的文章,然而call和bind的原理真如他们所说的那样吗?今天就让我来推翻这些所谓的原理,揭开谎言下的真相。 首先看看网上对call的实现: // 手写 call Function

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吗

原生js代码能实现call和bind吗:js手动实现call和bind都是谎言 网上有很多关于说自己实现call和bind的原理的文章,然而call和bind的原理真如他们所说的那样吗?今天就让我来推翻这些所谓的原理,揭开谎言下的真相。 首先看看网上对call的实现: // 手写 call Function
推荐度:
标签: call 实现 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top