当前位置: 首页 > Web前端 > JavaScript

JavaScript相关

时间:2023-03-26 22:12:45 JavaScript

1、call和apply方法this总是指向最后调用该函数的对象,call方法用于改变函数的this指向;letobjD={name:'小李'}letobj={age:7,showDetail:function(){console.log('myname:'+this.name)}}obj.showDetail()使用后调用method,改变this的方向,后面的参数都是正常的函数参数;letobjD={name:'小李'}letobj={age:7,showDetail:function(age){console.log('我的名字:'+this.name+',我的年龄:'+age)}}obj.showDetail.call(objD,17)用apply可以达到同样的效果,但是参数需要改成数组;letobjD={name:'小李'}letobj={age:7,showDetail:function(age){console.log('我的名字:'+this.name+',我的年龄:'+age)}}obj.showDetail.apply(objD,[16])this指向//1.o.s()方法执行,get_和test()方法//2.执行test()方法,现在执行在函数的最外层,this指向window,变化被发送,但是_不会变化//3.Output510vara=5;functions(){var_=this;功能测试(){console.log(“a:”,this.a);console.log("o.a:",_.a);}test();}leto={a:10,s:s,};o.s();2。原型和原型链对象的__proto__和构造函数的原型(prototype)都指向构造函数的原型对象。当它是有性的时候,它会沿着原型查找属性,形成一个原型链:functionPerson(name,age){this.name=name;this.age=age;}Person.prototype.sayName=function(){返回这个。name;}letp=newPerson('小马',18);p.__proto__===Person.prototype//outPut:true原型对象通过构造函数指向构造函数;Person.prototype.constructor===Person//outPut:true3.手写防抖防抖是闭包的一个应用。定时器可以被外界修改,不会污染整个世界;functiondebounce(fn,delay){lettimerreturnfunction(...args){//稍后点击会破坏第一次初始化,流程会在delay内继续循环,方法不会执行if(timer){clearTimeout(timer)}//第一次点击初始化timer=setTimeout(()=>{fn.apply(this,args)},delay)}}4.reduce+hash重新排序constinitData=(ydrz)=>{lethash={};ydrz=ydrz.reduce((pre,cur)=>{hash[cur.czdz]?'':(hash[cur.czdz]=true&&pre.push(cur));returnpre;},[]);让结果=ydrz.sort((a,b)=>a.czdz-b.czdz);返回结果;};5。正则表达式创建正则表达式的两种方法://1.字面量创建varre=/ab+c/;//2.RegExp构造函数创建varre=newRegExp("ab+c");5.1水平模糊匹配的正则表达式只有精确匹配是没有意义的。它的优势在于模糊匹配。水平模糊匹配是指长度不固定。一个字母是a,最后一个字母是c,还有2-5个cvarregex=/ab{2,5}c/gvarstring='abcabbcabbbcabbbbcadddc'console.log(string.match(regex))//outPut:['abbc','abbbc','abbbc']5.2垂直模糊匹配垂直模糊匹配是指指定某个字符时,可以有多种可能/a[123]b/g表示第一种两个可以说123varregexp=/a[123]b/gvarstring='a0ba1ba2ba3ba4b'console.log(string.match(regexp))//outPut:['a1b','a2b','a3b']