//call
// Function.prototype.myCall=function(context,...args){
// if(typeof this !='function'){
// throw 'naf'
// }
// context = typeof context=='object' ?context :window;
// const fn =Symbol();
// context[fn] = this;
// let res = context[fn](...args);
// delete context.fn;
// return res;
// }
// function testCall(){
// console.log(this);
// }
// testCall.myCall()
//apply
// Function.prototype.myapply = function(context,args){
// if(typeof this!='function'){
// throw 'naf'
// }
// context = typeof context=='object' ? context : window;
// context.fn = this;
// let res = context.fn(args);
// delete context.fn;
// return res;
// }
// function testapply(){
// console.log(this);
// }
// testapply.myapply()
//bind
// Function.prototype.mybind=function(context,...args){
// if(typeof this!='function'){
// throw 'naf'
// }
// context = typeof context=='object' ?context:window;
// context.fn = this;
// return function(...newArgs){
// let res = context.fn(...args,...newArgs);
// return res;
// }
// }
//new
// function myNew(func,...args){
// let obj ={};
// obj.__proto__=func.prototype;
// let res = func.call(res,...args)
// return typeof res=='object' ? res :obj;
// }
//洗牌算法
// function shuffle(arr){
// for(let i=0;i<arr.length;i++){
// let index = Math.floor(Math.random()*i);
// [arr[i],arr[index]]=[arr[index],arr[i]];
// }
// return arr
// }
// let arr = Array.from(Array(100), (item, index) => index);
// shuffle(arr);
// console.log(arr)
//原型链继承:问题:父级中有例如列表的引用数据类型的话,会影响并共享。
//且也无法向其中传递参数。
// function Person(){
// this.name = 'person'
// }
// function Son(){
// this.a='a'
// }
// Son.prototype = new Person();
// Son.prototype.constructor = Son;
// let s1 = new Son();
// console.log(s1)// {"a":"a"}
// console.log(s1.name)//person
// console.log(s1.constructor)//Son
//构造函数继承:实例之间互不影响,且可以传递参数。
//缺点是每次子实例新建时都会调用父构造函数。
// function Person(){
// this.name = 'person'
// }
// function Son(){
// Person.call(this);
// this.a='a'
// }
// let s1 = new Son();
// console.log(s1)
//组合继承
// function Person(){
// this.name = 'person'
// }
// function Son(){
// Person.call(this);
// this.a='a'
// }
// Son.prototype = new Person();
// Son.prototype.constructor = Son;
// let s1 = new Son();
// console.log(s1)
//原型式继承
// function Person(){
// this.name = 'person'
// }
// function createSon(o){
// function Son(){
// this.type='son'
// }
// Son.prototype = o;
// return new Son();
// }
// let s1 = createSon(new Person());
// console.log(s1)
//寄生式继承
// function Person(){
// this.name='person'
// }
// function createSon(o){
// let clone = Object.create(o);
// clone.sayhi = function(){
// console.log('hi')
// }
// return clone;
// }
//节流
// let throttle = function(func,time){
// let timer;
// return function(...args){
// if(!timer){
// timer = setTimeout(()=>{
// func.apply(this,args);
// timer = null;
// },time)
// }
// }
// }
// //防抖
let debounce = function(func,time,limit){
let count=0;
let timer;
return function(...args){
if(count>=limit){
func.apply(this,args)
}else{
if(timer){
count++;
timer = null;
}
timer = setTimeout(()=>{
func.apply(this,args);
timer = null;
},time)
}
}
}
//promise实现sleep
// function mysleep(time){
// return new Promise((resolve,reject)=>{
// setTimeout(resolve,time);
// })
// }
// function sayhi(){
// console.log('hi');
// }
// mysleep(2000).then(()=>{
// sayhi();
// })
//promise模拟延迟发起请求
function myRequest(time){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(time,'time')
Math.random() > 0.5 ? resolve('success') :reject('reject');
} , time)
})
}
// myRequest(1000).then(res=>{
// console.log(res,'dd')
// },err=>{
// console.log(err,'dd')
// })
// let urls = [2000, 1000, 5000, 4000];
// let urls2 = [1000, 2000, 3000, 4000];
// let urls3 = [4000, 3000, 2000, 1000, 2000, 1000, 5000, 4000, 1000, 0];
// function request(urls){
// let res = [];
// // for(let i=0;i<urls.length;i++){
// // myRequest(urls[i]).then((msg)=>{
// // res[i] = msg;
// // },(err)=>{
// // res[i] = err;
// // })
// // .finally(()=>{
// // for(let i=0;i<urls.length;i++){
// // console.log(res[i])
// // }
// // })
// urls.reduce((pre,cur)=>{
// return myRequest(cur).then((suc)=>{
// console.log(suc,'succ')
// },(err)=>{
// console.log(err,'err')
// })
// },null)
// // }
// }
// request(urls)
console