介绍
今天就跟大家聊聊有关如何在JavaScript中使用装饰器函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
具体如下:
装饰器函数(Decorator)用于给对象在运行期间动态的增加某个功能,职责等。相较通过继承的方式来扩充对象的功能,装饰器显得更加灵活,首先,我们可以动态给对象选定某个装饰器,而不用铁杆继承对象来实现某个功能点。其次:继承的方式可能会导致子类繁多,仅仅为了增加某一个单一的功能点,显得有些多余了。
下面给出几个常用的装饰器函数示例,相关代码请查看github。
1动态添加onload监听函数
function addLoadEvent (fn), { var 才能;oldEvent =, window; 如果才能(typeof window.onload  !=, & # 39;函数# 39;),{ ,,,window.onload =, fn; }else {才能 ,,,window.onload =,()函数,{ ,,,,,oldEvent (); ,,,,,fn (); ,,,}; ,,} } function fn1 (), { console.log才能(& # 39;onloadFunc 1 & # 39;); } function fn2 (), { console.log才能(& # 39;onloadFunc 2 & # 39;); } function fn3 (), { console.log才能(& # 39;onloadFunc 3 & # 39;); } addLoadEvent (fn1); addLoadEvent (fn2); addLoadEvent (fn3);
2前置执行函数和后置执行函数
Function.prototype.before =,函数(beforfunc), { var 才能;self =,; var 才能;outerArgs =, Array.prototype.slice.call(参数,,1); return 才能;函数(),{ ,,,var innerArgs =, Array.prototype.slice.call(参数); ,,,beforfunc.apply (,, innerArgs); ,,,self.apply (,, outerArgs); ,,}; }; 时间=Function.prototype.after 函数(afterfunc), { var 才能;self =,; var 才能;outerArgs =, Array.prototype.slice.call(参数,,1); return 才能;函数(),{ ,,,var innerArgs =, Array.prototype.slice.call(参数); ,,,self.apply (,, outerArgs); ,,,afterfunc.apply (,, innerArgs); ,,}; }; var func =,函数(名字){ console.log才能(& # 39;小姐:am & # 39;, +,名称); }; var beforefunc =,函数(年龄){ console.log才能(& # 39;小姐:am & # 39;, +, age +, & # 39;, years 老# 39;); }; var afterfunc =,函数(性别){ console.log才能(& # 39;小姐:am a & # 39;, +,性别); }; var beforeFunc =, func.before (beforefunc, & # 39;安迪# 39;); var afterFunc =, func.after (afterfunc, & # 39;安迪# 39;); beforeFunc (& # 39; 12 & # 39;); afterFunc(& # 39;男孩# 39;);
执行结果,控制台打印如下:
小姐:am 12, years 老了 小姐:am 安迪 小姐:am 安迪 小姐:am a 男孩
3函数执行时间计算
function 日志(函数){ return 才能;函数(args) { ,,,const start =, Date.now (); ,,,let result =, func (…args); ,,,const used =, Date.now(),安康;开始; ,,,console.log (“call $ {func.name}, ($ {args}), used ${}使用,女士”); ,,,return 结果; ,,}; } function 计算(次){ let 才能;sum =, 0; let 才能;小姐:=,1; 而才能(小姐:& lt;,次){ ,,,sum +=,我; ,,,我+ +; ,,} return 才能,总和; } 时间=runCalculate 日志(计算); let result =, runCalculate (100000); console.log(结果);
注:这里我使用了ES2015 (ES6)语法,如果你感兴趣可以查看前面关于ES6的相关内容。
看完上述内容,你们对如何在JavaScript中使用装饰器函数有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。