练练手手

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;

你可能感兴趣的:(练练手手)