亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript裝飾器函數(Decorator)實例詳解

2019-11-19 16:58:28
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript裝飾器函數(Decorator)。分享給大家供大家參考,具體如下:

裝飾器函數(Decorator)用于給對象在運行期間動態的增加某個功能,職責等。相較通過繼承的方式來擴充對象的功能,裝飾器顯得更加靈活,首先,我們可以動態給對象選定某個裝飾器,而不用hardcore繼承對象來實現某個功能點。其次:繼承的方式可能會導致子類繁多,僅僅為了增加某一個單一的功能點,顯得有些多余了。

下面給出幾個常用的裝飾器函數示例,相關代碼請查看github。

1 動態添加onload監聽函數

function addLoadEvent(fn) {  var oldEvent = window.onload;  if(typeof window.onload != 'function') {    window.onload = fn;  }else {    window.onload = function() {      oldEvent();      fn();    };  }}function fn1() {  console.log('onloadFunc 1');}function fn2() {  console.log('onloadFunc 2');}function fn3() {  console.log('onloadFunc 3');}addLoadEvent(fn1);addLoadEvent(fn2);addLoadEvent(fn3);

2 前置執行函數和后置執行函數

Function.prototype.before = function(beforfunc) {  var self = this;  var outerArgs = Array.prototype.slice.call(arguments, 1);  return function() {    var innerArgs = Array.prototype.slice.call(arguments);    beforfunc.apply(this, innerArgs);    self.apply(this, outerArgs);  };};Function.prototype.after = function(afterfunc) {  var self = this;  var outerArgs = Array.prototype.slice.call(arguments, 1);  return function() {    var innerArgs = Array.prototype.slice.call(arguments);    self.apply(this, outerArgs);    afterfunc.apply(this, innerArgs);  };};var func = function(name){  console.log('I am ' + name);};var beforefunc = function(age){  console.log('I am ' + age + ' years old');};var afterfunc = function(gender){  console.log('I am a ' + gender);};var beforeFunc = func.before(beforefunc, 'Andy');var afterFunc = func.after(afterfunc, 'Andy');beforeFunc('12');afterFunc('boy');

執行結果,控制臺打印如下:

I am 12 years oldI am AndyI am AndyI am a boy

3 函數執行時間計算

function log(func){  return function(...args){    const start = Date.now();    let result = func(...args);    const used = Date.now() - start;    console.log(`call ${func.name} (${args}) used ${used} ms.`);    return result;  };}function calculate(times){  let sum = 0;  let i = 1;  while(i < times){    sum += i;    i++;  }  return sum;}runCalculate = log(calculate);let result = runCalculate(100000);console.log(result);

注:這里我使用了ES2015(ES6)語法,如果你感興趣可以查看前面關于ES6的相關內容。

當然,裝飾器函數不僅僅這些用法。天貓使用的Nodejs框架Koa就基于裝飾器函數及ES2015的Generator。希望這篇文章能起到拋磚引玉的作用,使你編寫更優雅的JS代碼。

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript中json操作技巧總結》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript動畫特效與技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品网址在线观看| 日韩美女中文字幕| 国产精品成久久久久三级| 欧美日韩中文字幕在线| 色噜噜国产精品视频一区二区| 久久的精品视频| 97精品久久久中文字幕免费| 国语自产精品视频在线看抢先版图片| 国产欧美精品一区二区三区介绍| 4p变态网欧美系列| 中文字幕亚洲无线码在线一区| 91精品视频免费| 欧美国产日产韩国视频| 久久精品视频导航| 欧美性猛交xxxx免费看| 欧美国产日本在线| 成人黄色av播放免费| 另类少妇人与禽zozz0性伦| 美女性感视频久久久| 国外成人在线播放| 亚洲情综合五月天| 亚洲欧洲自拍偷拍| 91高清视频免费| 国产欧美日韩中文字幕| 亚洲精品欧美日韩专区| 日韩亚洲成人av在线| 国内精品伊人久久| 久久久999精品免费| 日韩国产欧美精品一区二区三区| 亚洲精品suv精品一区二区| 国产免费成人av| 国语对白做受69| 国产精品视频网站| 91色琪琪电影亚洲精品久久| 国产成人精品一区二区在线| 亚洲国内精品视频| 国产性色av一区二区| 亚洲高清福利视频| 超碰精品一区二区三区乱码| 欧美日韩电影在线观看| 国模吧一区二区三区| 久久久精品一区二区三区| 欧美与黑人午夜性猛交久久久| 亚洲福利在线播放| 国产一区视频在线| 国产aⅴ夜夜欢一区二区三区| 亚洲欧美国产制服动漫| 国产精品视频网址| 亚洲伊人第一页| 欧美日韩亚洲系列| 久久色精品视频| 国产suv精品一区二区三区88区| 色综合天天综合网国产成人网| 欧美裸体xxxx| 亚洲精品一区二三区不卡| 午夜欧美大片免费观看| 欧美成人免费大片| 国产一区二区丝袜| 亚洲最大激情中文字幕| 国产日韩在线免费| 国产精品美女免费看| 国产福利视频一区二区| 亚洲视频一区二区| 国产精品v日韩精品| 成人午夜一级二级三级| 国产精自产拍久久久久久蜜| 中文字幕精品影院| 成人高h视频在线| 久久免费视频在线| 久久亚洲成人精品| 日韩视频亚洲视频| 欧美日韩爱爱视频| 国产精品视频一区二区三区四| 成人精品久久久| 国产精品69精品一区二区三区| 蜜臀久久99精品久久久无需会员| 久久亚洲精品网站| 国产一区二区三区视频| 精品调教chinesegay| 日韩av在线网| 另类图片亚洲另类| 成人精品网站在线观看| 亚洲第一精品夜夜躁人人躁| 2020欧美日韩在线视频| 欧洲成人在线视频| 一本色道久久88综合日韩精品| 在线免费看av不卡| 国产成人涩涩涩视频在线观看| 一区二区三区无码高清视频| 亚洲视频在线看| 欧美中文在线视频| 91久久久久久久久久| 欧美日韩中文在线| 欧美成年人在线观看| 国产亚洲欧洲高清| 欧洲午夜精品久久久| 国产精品久久久久久久久久ktv| 国产视频久久久久| 亚洲视频欧美视频| xx视频.9999.com| 深夜福利国产精品| 97在线看免费观看视频在线观看| 精品国产91乱高清在线观看| 8x拔播拔播x8国产精品| 日韩电影中文 亚洲精品乱码| 国产精品久久久| 国产精品久久久久aaaa九色| 大桥未久av一区二区三区| 亚洲第一网站免费视频| 国产精品色午夜在线观看| 国产精品美乳一区二区免费| 亚洲国产精品成人一区二区| 亚洲偷欧美偷国内偷| 国产综合色香蕉精品| 日韩a**站在线观看| 中文精品99久久国产香蕉| 国产在线拍偷自揄拍精品| 亚洲成人av资源网| 精品国产一区二区在线| 中文国产亚洲喷潮| 欧美一级大胆视频| 国产91在线播放九色快色| 欧美人在线观看| 日韩三级影视基地| 亚洲欧美综合精品久久成人| 欧美午夜激情视频| 精品国内自产拍在线观看| 国产欧美婷婷中文| 日韩在线免费视频| 91久久嫩草影院一区二区| 欧美在线xxx| 欧美成人黑人xx视频免费观看| 欧美又大粗又爽又黄大片视频| 国产精品丝袜一区二区三区| 97香蕉超级碰碰久久免费的优势| 国产精品久久久久久久7电影| 91在线免费观看网站| 国产综合久久久久久| 国产精品羞羞答答| 欧美成人免费视频| 国产精品7m视频| 色婷婷av一区二区三区久久| 色青青草原桃花久久综合| 日韩高清不卡av| 精品国产依人香蕉在线精品| 欧美第一淫aaasss性| 亚洲无亚洲人成网站77777| 国产精品久久久久久久美男| 亚洲欧美日韩精品久久奇米色影视| 在线观看欧美日韩| 色综合久久精品亚洲国产| 国产欧美精品久久久| 在线视频欧美日韩精品| 久久精品国产久精国产思思| 欧美国产日韩视频| 国产极品精品在线观看| 欧美一区二三区| 日韩精品小视频| 久久艳片www.17c.com| 色七七影院综合| 久久久欧美精品| 奇门遁甲1982国语版免费观看高清| 欧美亚洲激情视频| 97香蕉久久超级碰碰高清版|