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)
}
}
}