本文实例讲述了Java脚本语言装饰器函数(装饰工).分享给大家供大家参考,具体如下:
装饰器函数(装饰工)用于给对象在运行期间动态的增加某个功能,职责等。相较通过继承的方式来扩充对象的功能,装饰器显得更加灵活,首先,我们可以动态给对象选定某个装饰器,而不用中坚分子继承对象来实现某个功能点。其次:继承的方式可能会导致子类繁多,仅仅为了增加某一个单一的功能点,显得有些多余了。
下面给出几个常用的装饰器函数示例,相关代码请查看github。
一动态添加装载监听函数
函数addLoadEvent(fn){ var oldEvent=window。onloadwindow.onload!=' function '){ window。onload=fn} else { window。onload=function(){ oldEvent();fn();};} }函数fn1(){控制台。日志(' OnLoadFunc 1 ');}函数fn2(){控制台。日志(' OnLoadFunc 2 ');}函数fn3(){控制台。日志(' OnLoadFunc 3 ');} AddLoadEvent(fn1);addLoadEvent(fn2);addLoadEvent(fn3);
2前置执行函数和后置执行函数
功能。原型。beforfunc=function(beforfunc){ var self=this;var outargs=数组。原型。切片。呼叫(参数,1);return function(){ var innerArgs=array。原型。切片。调用(参数);beforfunc.apply(this,innerArgs);自我应用(这个,外部参数);};};功能。原型。after=func(after func){ var self=this;var outargs=数组。原型。切片。呼叫(参数,1);return function(){ var innerArgs=array。原型。切片。调用(参数);自我应用(这个,外部参数);afterfunc.apply(this,innerArgs);};};var func=function(name){ console。日志(‘我是’的名字);};var先于func=function(age){ console。日志('我是'年龄'岁');};func=function(性别)后的var { console。日志('我是性别’);};func=func之前的var。before(在func之前,‘Andy’);func=func后的var。after(在func之后,“Andy”);BeforeFunc(' 12 ');在func(' boy ')之后;执行结果,控制台打印如下:
我12岁了,我是,我是,我是一个男孩函数执行时间计算
函数日志(func){ 0返回函数(.args){ const start=date。now();让结果=func(.args);const used=date。now()-start;控制台。log(` call $ { func。名称}($ { args })使用了$ { used } ms . `);返回结果;};}函数计算(次数)让sum=0;设I=1;虽然(我倍){ sum=I;我;}返回总和;}runCalculate=log(计算);让结果=runCalculate(100000);console.log(结果);注:这里我使用了ES2015(ES6)语法,如果你感兴趣可以查看前面关于ES6的相关内容。
当然,装饰器函数不仅仅这些用法。天猫使用的Nodejs框架寇阿相思树就基于装饰器函数及S2015的发电机。希望这篇文章能起到抛砖引玉的作用,使你编写更优雅的射流研究…代码。
更多关于Java脚本语言相关内容可查看本站专题: 《javascript面向对象入门教程》 、 《JavaScript中json操作技巧总结》 、 《JavaScript切换特效与技巧总结》 、 《JavaScript查找算法技巧总结》 、 《JavaScript动画特效与技巧汇总》 、 《JavaScript错误与调试技巧总结》 、 《JavaScript数据结构与算法技巧总结》 、 《JavaScript遍历算法与技巧总结》 及《JavaScript数学运算用法总结》
希望本文所述对大家Java脚本语言程序设计有所帮助。