js常用原生方法的实现

// myNew

function myNew(fn,...args){
    let obj = {}
    let res = fn.apply(obj,args)
    obj.__proto__ = fn.prototype
    return res instanceof Object ? res : obj

}
function myall(arr){
    return new Promise((resolve,reject) => {
        if(!Array.isArray(arr)) throw('参数必须为数组')
        let res = []
        let len = arr.length;
        let count = 0
        for(let i = 0; i < len; i++){
            Promise.resolve(arr[i])
            .then(val => {
                arr[i] = val
                count++
                if(count === lent) resolve(res)
            })
            .catch(e => console.log(e))
           
            
        }
    })
}
function race(arr){
    return new Promise((resolve,reject) => {
        if(!Array.isArray(arr)) throw('xx')
        for(let i = 0; i < arr.length; i++){
            Promise
            .resolve(arr[i])
            .then(val => resolve(val))
            .catch(e => reject(e))
        }
    })
    

}
function debounce(fn,delay){
    let timer;
    return function(){
        if(timer) clearTimeout(timer)
        timer = setTimeout(() => {
            fn.apply(this,arguments)
        },delay)
    }
    
}
  • 立即执行
function pdeounce(fn,delay,immediate){
    let timer,context,params;


    later = () => {
        timer = null
        setTimeout(() => {
            if(!immediate) fn(context,params)
            context = params = null
        },delay)
    }
    return function(...args){
        if(!timer){
            timer = later()
            if(immediate) fn.apply(this,args)
            else{
                context = this
                params = args
            }
        }else{
            clearTimeout(timer)
            timer = later()
        }

    }
}
  • 节流
 function throttle(fn,time){
     let time = 0;
     return function(...args){
         let timeNow = Date.now()
         if(timeNow - time > delay){
             fn.apply(this,args)
             time = timeNow
         }
     }
 }
  • call
function mycall(obj,...args){
    obj.fn = this
    obj.fn(...args)
    delete obj.fn
}
// 实现create(obj),实现以obj为原型
  • create
 function create(obj){
     function fn(){}
     fn.prototype = obj
     return new fn()
 }
  • 浅拷贝
function easyCopy(obj){
    const res = obj
    return res
}
function easyCopy(obj){
    return Object.assign({},obj)
}
function deepCopy(obj){
   return JSON.parse(JSON.stringify(obj))
}
function deepCopyD(obj){
   let copy = Array.isArray(obj) ? [] : {}
   for(let key in obj){
       if(obj.hasOwnPropperty(key)){
           copy[key] = typeof obj[key] === 'object'  ? deepCopyD(obj[key]): obj[key]
       }
   }
   return copy
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值