阴影中的曙光

30-seconds-of-code[JS部分](Adapter篇)

2018.10.23 / 技术相关 / 点击 68 / 回复 0 / JavaScript

精心挑选的有用的 JavaScript 代码片段,你可以在30秒或更短的时间内理解。 ——大神如是说

call

给定一个 key 和一个 set 作为参数,给定上下文时调用它们。主要用于函数组合。使用闭包以存储的参数调用存储的 key 。

const call = (key, ...args) => context => context[key](...args);
    /*call函数的定义转为ES5语法如下(...args 省略为 args)
     *var call = function call(key, args) {
     *      return function (context) {
     *    return context[key](args);
     *  };
     *};
    */

Promise.resolve([1, 2, 3])
  .then(call('map', x => 2 * x))
  .then(console.log); //[ 2, 4, 6 ]
    //Promise函数调用后实际为call('map', x => 2 * x)([1, 2, 3])
    //call函数的执行结果是一个函数 :
    //function sss(context){
    //         context['map'](x => 2 * x)
    //}
    //call函数参数为方法,和方法参数,call返回函数的参数为方法上下文
const map = call.bind(null, 'map');
Promise.resolve([1, 2, 3])
  .then(map(x => 2 * x))
  .then(console.log); //[ 2, 4, 6 ]

大坑慢慢填吧 ('-'*)