练练手手

1. curry函数柯里化
  const curring = (fn, arr=[]) => {
    let len = fn.length;
    return (...args) => {
        arr = [...arr, ...args];
        if (arr.length < len) {
          return curring(fn, arr)
        } else {
           return fn(...arr)
        }
    }
 }

2.手写call 、apply

//call
  Function.prototype.call = (context = window, ...args) => {
       context = context || window;
       context.fn = this;
       const result = context.fn(...args);
       delete context.fn;
       return result;
  }
//apply
Function.prototype.apply = (context = window, args=[]) => {
       context = context || window;
       context.fn = this;
       const result = context.fn(...args);
       delete context.fn;
       return result;
  }
//bind
  

3.new

function myNew () {
  const obj = new Object();
  Constructor = Array.prototype.shift.call(arguments);
  obj.__proto__ = Constructor.prototype;
  let ret = Constructor.apply(obj, arguments);
  return typeof ret === 'object' ? ret : obj;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。