1. curry函數(shù)柯里化
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;