網(wǎng)站首頁 編程語言 正文
一、裝飾器
裝飾器是一種特殊類型的聲明,它能夠被附加到類聲明,方法,屬性或參數(shù)上,可以修改類的行為。?
通俗的講裝飾器就是一個(gè)方法,可以注入到類、方法、屬性參數(shù)上來擴(kuò)展類、屬性、方法、參數(shù)的功能。?
常見的裝飾器有:類裝飾器、屬性裝飾器、方法裝飾器、參數(shù)裝飾器?
裝飾器的寫法:普通裝飾器(無法傳參) 、 裝飾器工廠(可傳參)
裝飾器是過去幾年中js最大的成就之一,已是Es7的標(biāo)準(zhǔn)特性之一
二、類裝飾器:
類裝飾器在類聲明之前被聲明(緊靠著類聲明)。
類裝飾器應(yīng)用于類構(gòu)造函數(shù),可以用來監(jiān)視,修改或替換類定義。 傳入一個(gè)參數(shù)
1、 類裝飾器:普通裝飾器(無法傳參)
function logClass(params: any) {
console.log(params);
// params 就是當(dāng)前類
params.prototype.apiUrl = '動(dòng)態(tài)擴(kuò)展的屬性';
params.prototype.run = function () {
console.log('我是一個(gè)run方法');
}
}
@logClass
class HttpClient {
constructor() {
}
getData() {
}
}
var http: any = new HttpClient();
console.log(http.apiUrl);
http.run();
2、 類裝飾器:裝飾器工廠(可傳參)
function logClass(params: string) {
return function (target: any) {
console.log(target);
console.log(params);
target.prototype.apiUrl = params;
}
}
@logClass('http://www.itying.com/api')
class HttpClient {
constructor() {
}
getData() {
}
}
var http: any = new HttpClient();
console.log(http.apiUrl);
下面是一個(gè)用類裝飾器重載構(gòu)造函數(shù)的例子。
類裝飾器表達(dá)式會(huì)在運(yùn)行時(shí)當(dāng)作函數(shù)被調(diào)用,類的構(gòu)造函數(shù)作為其唯一的參數(shù)。
如果類裝飾器返回一個(gè)值,它會(huì)使用提供的構(gòu)造函數(shù)來替換類的聲明。?
function logClass(target: any) {
console.log(target);
return class extends target {
apiUrl: any = '我是修改后的數(shù)據(jù)';
getData() {
this.apiUrl = this.apiUrl + '----';
console.log(this.apiUrl);
}
}
}
@logClass
class HttpClient {
public apiUrl: string | undefined;
constructor() {
this.apiUrl = '我是構(gòu)造函數(shù)里面的apiUrl';
}
getData() {
console.log(this.apiUrl);
}
}
var http = new HttpClient();
http.getData();
三、屬性裝飾器
屬性裝飾器表達(dá)式會(huì)在運(yùn)行時(shí)當(dāng)作函數(shù)被調(diào)用,傳入下列2個(gè)參數(shù):?
1、對于靜態(tài)成員來說是類的構(gòu)造函數(shù),對于實(shí)例成員是類的原型對象。?
2、成員的名字。
//類裝飾器
function logClass(params: string) {
return function (target: any) {
// console.log(target);
// console.log(params);
}
}
//屬性裝飾器
function logProperty(params: any) {
return function (target: any, attr: any) {
console.log(target);
console.log(attr);
target[attr] = params;
}
}
@logClass('xxxx')
class HttpClient {
@logProperty('http://itying.com')
public url: any | undefined;
constructor() {
}
getData() {
console.log(this.url);
}
}
var http = new HttpClient();
http.getData();
四、方法裝飾器
它會(huì)被應(yīng)用到方法的 屬性描述符上,可以用來監(jiān)視,修改或者替換方法定義。
方法裝飾會(huì)在運(yùn)行時(shí)傳入下列3個(gè)參數(shù):?
1、對于靜態(tài)成員來說是類的構(gòu)造函數(shù),對于實(shí)例成員是類的原型對象。?
2、成員的名字。?
3、成員的屬性描述符。
五、方法參數(shù)裝飾器?
參數(shù)裝飾器表達(dá)式會(huì)在運(yùn)行時(shí)當(dāng)作函數(shù)被調(diào)用,傳入下列3個(gè)參數(shù):
1、對于靜態(tài)成員來說是類的構(gòu)造函數(shù),對于實(shí)例成員是類的原型對象。?
2、參數(shù)的名字。?
3、參數(shù)在函數(shù)參數(shù)列表中的索引。?
原文鏈接:https://www.cnblogs.com/springsnow/p/13212198.html
相關(guān)推薦
- 2023-01-28 python元組的可變與不可變問題_python
- 2022-09-26 MQTT android配置
- 2022-11-23 解決vant組件van-list 首屏加載兩次的情況
- 2023-04-20 正則表達(dá)式:判斷是否符合USD格式
- 2022-07-12 linux中的火墻策略優(yōu)化
- 2022-08-27 Python?Pandas聚合函數(shù)的應(yīng)用示例_python
- 2022-12-07 React?Context?變遷及背后實(shí)現(xiàn)原理詳解_React
- 2022-04-24 Python元素集合的列表切片_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支