手机版

简单谈谈javascript的高级特性

时间:2021-08-20 来源:互联网 编辑:宝哥软件园 浏览:

js中没有类的概念,所以我们可以用函数来模拟。

惯性负载函数

例如,我们通常使用以下js代码来创建ajax:

函数create xhr(){ var xhr=null;尝试{ xhr=new XMLHttpRequest();//FF、Opera、Safari、IE7 } catch(e){ handler error(e);请尝试{ xhr=new ActiveXObject('Msxml2。XMLHTTP’);} catch(e){ try { xhr=ActiveX object(' Microsoft。XMLHTTP’);} catch(e){ xhr=null;} } }返回xhr} function handler error(err){ var errXHR=err;//.} ajax技术长期以来是现代网络技术中的一条烂街,一个网页通常包含大量的ajax——,导致xhr频繁创建,内存泄漏。我们可以使用惰性加载函数来动态生成xhr。

/*惯性函数(第二次生效)*/Function create xhr(){ var xhr=null;if(类型为XMLHttpRequest!=' undefined '){ xhr=new XMlhttprequest();createXHR=function(){ return new XMlhttprequest();} } else { try { xhr=new ActiveX object(' Msxml 2。XMLHTTP’);createXHR=function () {返回新的ActiveXObject('Msxml2。XMLHTTP’);} } catch(e){ try { xhr=new ActiveX object(' Microsoft。XMLHTTP’);createXHR=function () {返回新的activexoobject(' Microsoft。XMLHTTP’);} } catch(e){ createXHR=function(){ return null;} } } }返回xhr}我们调用上面的方法来创建xhr,这样在第二次运行的时候就不用每次都判断了,直接返回xhr。

功能核心化

Curry of functions将接受多个参数的函数转换为接受单个参数(原始函数的第一个参数)的函数,并返回一个接受剩余参数的新函数并返回结果。简而言之,它是两个函数的参数的组合。例如:

函数curry(fn){ var args=array . prototype . slice . call(arguments,1);//取curry的参数,改成array[100]console . log(args);//[100]返回函数(){ var innerArgs=array . prototype . slice . call(arguments);//匿名函数[1,2] console.log(innerArgs)的参数列表;//[1,2]var final args=args . concat(innerArgs);//合并数组(参数合并)console . log(final args);//[100,1,2]返回fn.apply(null,final args);} }函数add(num1,num2,num 3){ return num 1 num 2 num 3;}var t=curry(相加,100)(1,2);console . info(t);

级联函数

级联是一个将所有相关事物连接在一起的对象。例如以下对象。

//person:手、腿、口功能类person () {this。hand=this.foot=this.leg=} classperson。prototype={ sethand : function(){ this。手='大手';},设置leg:函数(){this。leg='长腿欧巴';},setmouse:函数(){this。鼠标='樱桃嘴';} } var person=new classPerson();person . sethand();person . setmouse();person . setleg();console . log(person);

我们知道造人是一个整体(不可能先造手、腿、嘴),我们现在的需求是,一旦把人的对象实例化了,就应该什么都有了。

只需修改上面的代码:

function CLaSS person(){ this . hand=' ';this.foot=this.leg=} classperson。prototype={ sethand : function(){ this。手='大手';归还这个;},设置leg:函数(){this。leg='长腿欧巴';归还这个;},setmouse:函数(){this。鼠标='樱桃嘴';归还这个;} } var person=new classPerson();person.setHand()。setMouse()。setLeg();//调用函数console . log(person);我们在每个setter中添加了return这个来返回原始对象(避免在没有返回值的函数执行后未定义)。我们可以惊奇地发现JQuery的链式调用是级联调用:$ ('# ID ')。显示()。隐藏()。显示()。隐藏()。显示()。

javascript中的正则表达式

一般来说,//代表js中的单行注释,但是一旦我们在对角线条的中间添加了一些东西,比如:/TEST/,它就神奇地变成了正则。

模式字符串的声明

var patt 1=new RegExp(' hello ');//方法1 var patt 2=/word/;//模式2测试方法

在我们获得模式字符串(模式对象)后,我们可以调用这个方法来匹配字符串并返回指定的值(真或假)。

var patt=/my/;var str='这是我的代码.';console . log(patt . test(str));//truexec方法

类似于string的match方法,但是当模式字符串被指定为全局时,它们的行为不同,如果没有匹配,将返回null。

/hello/。exec(‘哦你好世界’);//['hello']以上两种方法是字符串对象本身的方法,下面的方法是关于字符串中正则性的方法。

匹配方法

模式匹配。函数的原型是str.mattch(pattern),它以数组的形式返回匹配结果。

console.log('test 123 '。match(/test/g));//[测试]替换方法

字符串替换,注意:这个方法生成一个新的临时字符串副本。如图所示:

分割方法

根据模式将字符串拆分为数组。

console . log(‘Hello world,Hello大家好’。split(/\ s/);//['Hello ',' world,Hello ',' everybody ']console . log(' Hello world,hello everyone '。split(“”);//相当于上述方法的正则类型

/pattern/attributesattributes是可选字符串,常用的属性有“g”(全局匹配)、“I”(不区分大小写)和“m”(多行匹配)

console . log(‘Hello world,Hello大家好’。match(/HellO/gi));//全局查找hello,忽略大小写['Hello ',' hello']。在实际开发中,我们可以借助在线的常规调试工具来调试我们的规则,但实际上,内置了很多常用的规则。如果我们不能分析别人的规律性在发展中的意义,我们可以使用规律性分析网站,它将以有限自动机图的方式显示。

正则性中的元字符

正则表达式中的元字符必须转义:

([ { ^ $ | ) ?* .]}

需要注意的是,有两种方法可以创建常规形式的:字符串文字和新的RegExp()。因为RegExp的构造函数是一个字符串,所以在某些情况下需要双转义。

__PROTO__

__proto__使继承更容易:

函数Super(){ };function Sub(){ };子原型。原型=超级原型;这是一个非常有用的功能,可以避免以下任务:

借助于中间构造器

没有必要引入第三方模块来基于原型继承进行声明

存取器

您可以调用方法来定义属性,例如__defineGetter__,__defineSetter__。例如,为Date对象定义一个ago属性,并返回用自然语言描述的日期间隔(例如,3秒钟前发生的事情)。例如:

Date . prototype . _ _ defineGetter _ _(' ago ',function(){ var diff=((Date . now()-this . gettime())/1000)day _ diff=math . floor(diff/86400)返回day_diff==0 (diff 60 '刚才')|| diff 120 '1分钟前' || diff 3600 Math.floor(diff/60)'分钟前' || diff 7200 '1小时前' | | diff 86400 math . floor(diff/60)

版权声明:简单谈谈javascript的高级特性是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。