裝飾器模式在JS中的應用

裝飾器模式在JavaScript中的應用主要是通過修飾函數或類來添加額外的功能或行為。

在ES6中,裝飾器模式可以通過使用@語法糖來實現。我們可以將裝飾器應用于函數、類、方法或屬性等。下面是一些在JavaScript中使用裝飾器模式的示例:

  1. 修飾函數:
function log(target, name, descriptor) {const originalFn = descriptor.value;descriptor.value = function() {console.log(`Calling function ${name}`);return originalFn.apply(this, arguments);};return descriptor;
}class Example {@loggreet() {console.log('Hello, world!');}
}const ex = new Example();
ex.greet(); // 輸出:"Calling function greet","Hello, world!"

  1. 修飾類:
function log(target) {console.log(`Class ${target.name} being decorated`);
}@log
class Example {constructor() {console.log('Creating an instance of Example');}
}const ex = new Example(); // 輸出:"Class Example being decorated","Creating an instance of Example"

  1. 修飾方法:
function log(target, name, descriptor) {const originalFn = descriptor.value;descriptor.value = function() {console.log(`Calling method ${name}`);return originalFn.apply(this, arguments);};return descriptor;
}class Example {@loggreet() {console.log('Hello, world!');}
}const ex = new Example();
ex.greet(); // 輸出:"Calling method greet","Hello, world!"

裝飾器模式可以幫助我們在不修改原始函數或類的情況下,通過包裝它們來添加額外的功能。這可以增強代碼的可重用性和可維護性。

Sure! Here's a simple example that demonstrates the use of decorators in JavaScript:

// Decorator function that adds logging functionality
function log(target, name, descriptor) {const originalFn = descriptor.value;descriptor.value = function() {console.log(`Calling function ${name}`);return originalFn.apply(this, arguments);};return descriptor;
}// Decorator function that adds timing functionality
function timer(target, name, descriptor) {const originalFn = descriptor.value;descriptor.value = function() {console.time(`Executing function ${name}`);const result = originalFn.apply(this, arguments);console.timeEnd(`Executing function ${name}`);return result;};return descriptor;
}// Class with a decorated method
class Example {@log@timergreet(name) {console.log(`Hello, ${name}!`);}
}const ex = new Example();
ex.greet('John');

In this example, we have a class Example with a method greet. The greet method is decorated with two decorators: log and timer. The log decorator adds logging functionality by logging a message before the method is called. The timer decorator adds timing functionality by measuring the execution time of the method.

When we create an instance of Example and call the greet method with the name 'John', the decorators will execute their additional code before and after the original method code is executed. The output of the example will be something like:

Calling function greet
Executing function greet: 0.112ms
Hello, John!

As you can see, the decorators allow us to add extra behavior to the greet method without modifying its original implementation.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13503.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13503.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13503.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2.Spring中用到的設計模式

Spring框架中使用了多種設計模式來構建其強大且靈活的功能,這里舉例說明Spring中的一些功能使用到的設計模式。 工廠模式:Spring容器本質是一個大工廠,使用工廠模式通過BeanFactory和ApplicationContext這兩個核心接口來創建和管理bean對象。…

Java讀取串口及端口調試

本篇主要講述使用Java對串口進行讀取和發送操作 準備 在項目中導入第三方Jar包 Jar包已經在資源中綁定,或者去官網上自行下載jSerialComm 注意當前jar包是配合JDK1.8環境使用,如果是1.8以下程序將直接中斷 安裝虛擬串口的軟件 Configure Virtual Seri…

一款功能強大的安卓虛擬機應用——VMOS Pro使用分享

前段時間我剛剛分享一個WeChat平板模塊能夠允許用戶自由修改系統設置,讓你的Android備用手機煥發新生,實現手機PAD化,實現兩臺設備同時登錄微信號。今天我分享的這個相比WeChat更為簡單,因為它可以通過虛擬機的方式進行多種androi…

分類和品牌關聯

文章目錄 1.數據庫表設計1.多表關聯設計2.創建表 2.使用renren-generator生成CRUD1.基本配置檢查1.generator.properties2.application.yml 2.生成代碼1.進入localhost:81生成代碼2.將main目錄覆蓋sunliving-commodity模塊的main目錄 3.代碼檢查1.注釋掉CategoryBrandRelationC…

Tencent : TBDS簡介

Tencent TBDS(Tencent Big Data Suite)是騰訊公司推出的大數據處理套件,它基于騰訊多年海量數據處理經驗,依托云原生技術和泛Hadoop生態開源技術,為用戶提供可靠、安全、易用的大數據處理平臺。 TBDS可以在公有云、私…

JavaWeb基礎(HTML,CSS,JS)

這些知識用了三四天左右學完,因為是JavaWeb,并不是前端,所以只是夠用,不是深入,但是這確實是學校一個學期交的東西(JavaWeb課程)。 總結一下網頁分為三部分:HTML(內容結構),CSS&…

MySql--SQL語言

目錄 SQl---DDL 結構定義 創建、刪除 數據庫 代碼 運行 設計表 數據類型 整數 浮點數 主鍵 約束 主鍵自增長 默認值 字段注釋 創建、刪除 表 代碼 運行 代碼 代碼 運行 SQL---DML 數據操縱 插入數據 代碼 運行 代碼 運行 代碼 運行 代碼 …

【實戰教程】使用Spring AOP和自定義注解監控接口調用

一、背景 隨著項目的長期運行和迭代,積累的功能日益繁多,但并非所有功能都能得到用戶的頻繁使用或實際上根本無人問津。 為了提高系統性能和代碼質量,我們往往需要對那些不常用的功能進行下線處理。 那么,該下線哪些功能呢&…

貪心算法: 單調遞增的數字

參考資料:代碼隨想錄 題目鏈接:. - 力扣(LeetCode) 倒序遍歷每個數字,遇到前一個比后一個大的就減一,最后統一把后面幾位置為9 String str n"";char[] chars str.toCharArray();int flag c…

docker部署kafka實戰

目錄 一、部署kafaka、zookeeper 二、測試信息發送與接收 三、kafka進階 一、部署kafaka、zookeeper 請提前安裝docker、docker-compose 安裝docker:docker--安裝docker-ce-CSDN博客 安裝docker-compose: 安裝docker-compose_安裝 docker-compose-CSD…

云下到云上,麗迅物流如何實現數據庫降本50% | OceanBase案例

在2024年3月20日的首場OceanBase數據庫城市行活動中,專注于物流及供應鏈解決方案的麗迅物流的架構師陽磊,圍繞“OB Cloud在麗迅物流的實踐”這一主題,進行了精彩的演講。本文為此次演講的內容回顧。 在麗迅物流(Lesoon Logistics…

小demo - 列表hide or not (含代碼)

直接上代碼 <!DOCTYPE html> <html><head><style>.menu {width: 220px;height: 800px;border: 1px solid #dddddd;}.item {cursor: pointer;}.menu .header {padding: 10px 5px;background-color: goldenrod;}.menu .content a {display: block;paddi…

線程安全-1 synchronized鎖升級

一.說一下synchronized關鍵字的底層原理 1.synchronized又叫同步鎖&#xff0c;采用互斥的方式使同一時刻只能有一個線程持有鎖。 2.jdk1.6及以前&#xff0c;synchronized底層是用monitor實現的。monitor是jvm級別的對象&#xff0c;由c實現。每一個對象對應一個monitor&…

9.1 Go語言入門(環境篇)

Go語言入門&#xff08;環境篇&#xff09; 目錄一、什么是Go語言二、下載安裝配置Go語言開發環境1. 下載2. 安裝3. 配置環境變量4. 安裝環境驗證 三、 開發工具1. 下載2. 安裝3. 激活4. 配置SDK 四、 創建go工程文件并運行1. 創建go工程2. 示例代碼3. 運行代碼 目錄 一、什么…

軟件開源協議與QT的開源協議介紹

一.常見的六種開源協議 1.BSD協議 BSD協議全稱為“Berkely Software Distribution”&#xff0c;中文譯為“伯克利軟件發行版”。其最早用于伯克利UNIX操作系統上的開源貢獻。 主要特點&#xff1a; 允許修改源碼 允許源碼再發布 允許商業軟件發布和銷售 約束&#xff1…

shell 腳本筆記2

3.env與set區別 env用于查看系統環境變量 set用于查看系統環境變量自定義變量函數 4.常用環境變量 變量名稱含義PATH命令搜索的目錄路徑, 與windows的環境變量PATH功能一樣LANG查詢系統的字符集HISTFILE查詢當前用戶執行命令的歷史列表 Shell變量&#xff1a;自定義變量 目標…

HCIP【VRRP、MSTP、VLAN綜合實驗】

目錄 一、實驗拓撲圖&#xff1a; ?編輯二、實驗要求 三、實驗思路 四、實驗步驟 &#xff08;1&#xff09; eth-trunk技術配置 &#xff08;2&#xff09;vlan 技術配置 &#xff08;3&#xff09;配置SW1、SW2、AR1、ISP的IP地址 &#xff08;4&#xff09;在交換機…

FBB-Frontiers in Bioengineering and Biotechnology

文章目錄 一、期刊簡介二、征稿信息三、期刊表現四、投稿須知五、投稿咨詢 一、期刊簡介 Frontiers in Bioengineering and Biotechnology是專注生物工程和生物技術領域的開放獲取期刊。 研究范圍涵蓋生物材料、生物力學、生物工藝工程、生物安全和生物安保&#xff0c;生物傳…

QT項目-歡樂斗地主游戲

QT項目-歡樂斗地主游戲 游戲概述游戲規則牌型牌型的大小游戲角色游戲規則游戲的勝負游戲計分規則 游戲相關的類介紹卡牌類玩家類窗口類游戲控制類游戲策略類線程類音頻類 游戲主要組件卡牌玩家窗口 游戲控制源碼 游戲概述 游戲規則 不同地域游戲規則可能有些許差異&#xff0c…

MySQL之Schema與數據類型優化(三)

Schema與數據類型優化 BLOB和TEXT類型 BLOB和TEXT都是為存儲很大的數據而設計的字符串數據類型&#xff0c;分別采用二進制和字符方式存儲。 實際上它們分別屬于兩組不同的數據類型家族:字符類型是TINYTEXT&#xff0c;SMALLTEXT,TEXT&#xff0c;MEDIUMTEXT&#xff0c;LONG…