new
function myNew (ctor,...args) {
const obj = {};
obj.__proto__ = ctor.prototype;
ctor.call(obj, ...args);
return obj;
}
柯里化无限加
function add() {
let args = Array.prototype.slice.call(arguments, 0);
function fun() {
const newArgs = Array.prototype.slice.call(arguments, 0);
args = args.concat(newArgs)
return fun;
}
fun.toString = function() {
let sum = 0;
args.forEach(arg => sum += arg);
return sum;
}
return fun;
}
相加结果
Promise(简单点实现的哈,没考虑太多场景)
class Promise {
status = 'pending';
thenCallbacks = [];
catchCallback = () => {};
constructor(exec) {
const that=this;
let resolve=(res)=>{
let result = res;
that.status = 'resolved';
for(let cb of that.thenCallbacks) {
result = cb(result);
}
return that;
}
let reject=(err)=>{
that.status = 'rejected';
that.catchCallback(err);
throw new Error(that.error);
}
exec(resolve,reject);
}
then=function(callback){
this.thenCallbacks.push(callback);
return this;
}
catch=function(errCallback){
this.catchCallback = errCallback;
}
}
Promise结果