js 常见手写题-2

1,防抖

function debounce(fn,time){
            let timer=null;
            if(timer){
                clearTimeout(timer)
            }
            timer = setTimeout(
                fn(),time
            )
        }

2,节流

function throttle(fn,time){
            let timer=0;
            if(!timer){
                timer = setTimeout(
                    fn.apply(this),time
                )
            }
        }

3,封装ajax

function sendAjax(url,method,data){
            return new Promise((res,rej)=>{
                let xhr = new XMLHttpRequest();
                if(method==='get'){
                    xhr.open(get,url+"?"+data,true)
                }else{
                    xhr.open(post,url,true)
                    xhr.setRequestHeader('Content-Type','application/json');
                    xhr.send(data)
                }
                xhr.onreadystatechange=function(){
                    if(xhr.status=200&&xhr.readyState==4){
                        let response = xhr.responseText;
                        res(JSON.parse(response))
                    }else{
                        rej(false)
                    }
                }
            })
        }

4,promise 简版

function myPromise(){
            let self = this;
            self.status = 'pending';
            self.value = null;
            self.rej = null;
            function resovle(value){
                self.value = value;
                self.status = 'resovle';
            }
            function reject(rej){
                self.rej = rej;
                self.status = 'reject'
            }
        }
        myPromise.prototype.then=function(onResovle,onReject){
            let self = this;
            switch (self.status){
                case 'resovle':
                onResovle(self.value);
                breack;
                case 'reject':
                onResovle(self.rej);
                break;
                default:
            }
        }

5,实现instanse of

function myInstance(left,right){
            let proto = left.__proto__;
            while(true){
                if(proto===null){return false};
                if(proto===right.prototype){
                    return true;
                }
                proto = proto.__proto__;
            }
        }

6,实现柯里化

function curry(fn,args){
	let args=args||[],len=fn.length;
    return function(){
    	let newArgs = args.concat([...args]);
        if(newArgs.length<len){
        	curry.apply(this,fn,newArgs)
        }else{
        	fn.apply(this,args)
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值