ES6 spread operator 实现Function.prototype.apply

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6 spread operator 实现Function.prototype.apply相关的知识,希望对你有一定的参考价值。

之前出于好奇想自己实现apply的功能(不使用call,bind),一写才发现用eval无法实现,除非传入的参数全是字符串。

今天突然看到这个ES6新特性spread opertor,发现有戏了

Function.prototype.apply2 = function(obj, arg) {
  var t = typeof obj == ‘object‘ && !!obj ? obj : window,
    res;
  t.__func__ = this;
  if(arg) {
    if(!Array.isArray(arg)) throw ‘arg is not array‘;
    res = t.__func__(...arg);  //es6
  } else {
    res = t.__func__();
  }
  delete t.__func__;
  return res;
};

 

以上是关于ES6 spread operator 实现Function.prototype.apply的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript展开操作符(Spread operator)介绍

ES6 spread元素 - 默认值

javascript 使用Spread Operator复制数组

安装 ES2018 object spread operator babel 插件报错

ES6扩展/收集运算符--spread/rest

ES6数组扩展运算符(Rest+Spread)类方法原型方法