您当前的位置: 首页 > 

@大迁世界

暂无认证

  • 0浏览

    0关注

    739博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

07.call 方法

@大迁世界 发布时间:2021-06-28 08:28:24 ,浏览量:0

使用方便有用的方法,以减少代码行数,提高我们的工作效率,增加我们的摸鱼时间。

call 方法

功能:给定一个键和一组参数,当给定一个上下文时调用它们。

有点抽象,稍后我们看看示例讲解。

实现

const call = (key, ...args) => context => context[key](...args);

使用一个闭包来调用带有给定上下文的argskey

示例

Promise.resolve([1, 2, 3])
  .then(call('map', x => 2 * x))
  .then(console.log); // [ 2, 4, 6 ]

说明一下:

首先看 call('map', x => 2 * x),它执行的结果返回一个函数,把参数带入进去得:

context => context['map'](x => 2 * x)

我们暂且把它命名为 x,即x = context => context['map'](x => 2 * x),代入 promise 中

Promise.resolve([1, 2, 3]).then(x).then(console.log)

我们 then的第一个参数表示 resolve 返回的的结果,即 [1, 2, 3],而

x 函数参数一个 context 的参数,所以此时的 context 的值为 [1, 2, 3],代入得

[1, 2, 3]['map'](x => 2 * x)

所以的结果是 [ 2, 4, 6 ],再把此结果返回给第二个 then 方法,所以console.log的结果是 [ 2, 4, 6 ]

还可以这么写

const map = call.bind(null, 'map');
Promise.resolve([1, 2, 3])
  .then(map(x => 2 * x))
  .then(console.log); // [ 2, 4, 6 ]

bind的作用是改变 this指向并返回一个函数,第二个参数及第三个参数等就是所改变的函数参数。

const map = call.bind(null, 'map') 等价于 const map = ('map', ...args) => context => context['map'](...args)

接下来在再我们上面分析的一样代入即可,所以得的结果还是一样的。

关注
打赏
1664287990
查看更多评论
立即登录/注册

微信扫码登录

0.0421s