Promise.all=function(promises){returnnewPromise(function(resolve, reject){var result =[]var count =0var promiseNum = promises.length
if(promises.length ===0)resolve([])for(let i =0; i < promiseNum; i++){
Promise.resolve(promises[i]).then(function(val){
count++
result[i]= val
if(count === promiseNum)resolve(result)},function(error){reject(error)})}})}
2. promise.race
Promise.race=function(promises){returnnewPromise(function(resolve, reject){for(var i; i < promises.length; i++){
Promise.resolve(promises[i]).then(function(data){resolve(data)},function(error){reject(error)})}})}
3. Object.create
_create=function(proto, properties){// 新申明一个函数varF=function(){}// 将函数的原型指向protoF.prototype = proto
// 返回这个函数的实力化对象var o =newF()if(typeof properties ==='object'){
Object.defineProperties(o, properties)}return o
}
4. new
function_new(Con,...args){//1.创建一个空的简单JavaScript对象(即car = {});let obj ={}// 2.将构造函数的作用域赋给新对象(因此this就指向了这个对象);
Object.setPrototypeOf(obj, Con.prototype)// obj.constructor.prototype === obj.__proto__ === Con.prototype// 3.相当于调用构造函数Car,并拿到构造函数返回的结果(执行构造函数中的代码(为这个新对象添加属性))let result = Con.apply(obj, args)// 4. 如果构造函数返回的结果是object,则用构造函数的结果作为返回值;否则返回这个临时对象(也就是this),这个临时对象的原型链指向该构造函数return result instanceofObject? result : obj
}
5. map
Array.prototype.map=function(fn){if(this===null|| underfined){throw'输入不能为null或者underfinded'}let res =[]for(let i=0; i<this.length; i++){
res.push(fn(this[i], i,this))}return res
}
6. filter
Array.prototype.filter=function(fn){if(this===null|| underfined){throw'输入不能为null或者underfinded'}let res =[]for(let i =0; i <this.length; i++){if(fn(this[i],i,this)){
res.push(this[i])}}return res
}
Function.prototype.call=function(context){if(typeofthis!=='function'){thrownewTypeError(`${this} is not a function`)}
context = context || window;
context.fn =thisconst args =[...arguments].slice(1)const result = context.fn(...args)delete context.fn
return result
}
12. apply
Function.prototype.apply=function(context){if(typeofthis!=='function'){thrownewTypeError(`${this} is not a function`)}
context = context || window;
context.fn =thislet result
if(arguments[1]){
result = context.fn(...arguments[1])}else{
result = context.fn()}delete context.fn
return result
}
13. bind
Function.prototype.bind=function(context){if(typeofthis!=='function'){thrownewTypeError(`${this} is not a function`)}
context = context || window
context.fn =thisconst args =[...arguments].slice(1)returnfunctionF(){// 如果调用了newif(thisinstanceofF){returnnewcontext.fn(...args,...arguments)}return context.fn(args.concat(...arguments))}}
1. promise.allPromise.all = function(promises) { return new Promise(function(resolve, reject) { var result = [] var count = 0 var promiseNum = promises.length if (promises.length === 0) resolve([]) for (let i = 0; i < promiseNum;