functionflatter(arry){let res =[]for(let i =0; i < arry.length; i++){if(Array.isArray(arry[i])){
res.concat(flatter(arry[i]))}else{
res.push(arry[i])}}return res
}
Function.prototype.new=function(obj){let res = Object.create(obj)let args = Array.from(arguments).slice(1)let ret =obj.call(res,...args)return ret || res
}
5.object.create 函数
Object.prototype.create=function(proto, propertyObject =undefined){// 创建一个空的构造函数 FfunctionF(){}// F 原型指向 protoF.prototype = proto
// 创建 F 的实例const obj =newF()// propertiesObject有值则调用 Object.definePropertiesif(propertyObject !=undefined){
Object.defineProperties(obj, propertyObject)}if(proto ===null){// 创建一个没有原型对象的对象,Object.create(null)
obj.__proto__ =null}// 返回 这个 objreturn obj
}
6.object.assgin 函数
Object.prototype.assgin=function(target,...source){let res =Object(target);
source.forEach(function(obj){if(obj !=null){for(let key in obj){if(obj.hasOwnProperty(key)){
res[key]= obj[key];}}}})return res;}
7.手写promise.all()
Promise.prototype.all=(arr)=>{let result =newArray(arr.length);let counter =0;//注意这里通过一个变量取保存它的成功的数量returnnewPromise((resolve, reject)=>{
arr.forEach((item, index)=>{let i = index;
Promice.resolve(item).then(value=>{
result[i]= value;
counter ++;if(counter === arr.length){//通过conter变量比较,而不是直接通过result.length去判断resolve(result);}}).catch(err=>{reject(err)})})});}