三分钟快速了解typeScript的装饰器
↓↓↓
typeScript系列学习文章目录
装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为。
通俗的讲装饰器就是一个方法,可以注入到类、方法、属性参数上来扩展类、属性、方法、参数的功能。
常见的装饰器有:类装饰器、属性装饰器、方法装饰器、参数装饰器
装饰器的写法:普通装饰器(无法传参) 、 装饰器工厂(可传参)
注意:使用装饰器会报以下错误,点击快速修复或者手动在json文件里增加以下代码
"experimentalDecorators": true,
对修饰器的实验支持是一项将在将来版本中更改的功能。设置 "experimentalDecorators" 选项以删除此警告。
运行顺序:属性>方法>方法参数>类 如果有多个同样的装饰器,它会先执行后面的
类装饰器
类装饰器在类声明之前被声明(紧靠着类声明)。 类装饰器应用于类构造函数,可以用来监视,修改或替换类定义。
类装饰器:普通装饰器(无法传参)
function logClass(params:any){console.log(params)// 动态扩展属性egparams.prototype.name = "fur"//动态扩展方法params.prototype.run =function(){console.log("run")}
}
@logClass
class Person { study(){console.log("study")}
}var p:any = new Person()
p.study()//study
console.log(p.name)//fur
p.run()//run
类装饰器:装饰器工厂(可传参)
function logClass(params:any){return function(target:any){target.prototype.name=params;}
}
@logClass('furfur')
class Person { study(){console.log("study")}
}
var p:any = new Person()
p.study()//study
console.log(p.name)//furfur
属性装饰器
属性装饰器表达式会在运行时当作函数被调用,传入下列2个参数:
1、对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
2、成员的名字。
function logProperty(params:any){return function(target:any,attr:any){target[attr]=params;console.log(attr)console.log(target)}
}class Person {@logProperty("fur") name:string|undefined;constructor(){}study(){console.log("study")}
}var p:any = new Person()
p.study()//study
console.log(p.name)//fur
方法装饰器
它会被应用到方法的 属性描述符上,可以用来监视,修改或者替换方法定义。
方法装饰会在运行时传入下列3个参数:
1、对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
2、成员的名字。
3、成员的属性描述符
function get(params:any){return function(target:any,methodName:any,desc:any){console.log(methodName);//getDatatarget.apiUrl='fur';target.run=function(){console.log('run');}}
}class HttpClient{ public url:any |undefined;constructor(){}@get('http://www.fur.com')getData(){ }
}var http:any=new HttpClient();
console.log(http.apiUrl);//fur
http.run();//run
方法参数装饰器
方法参数装饰器表达式会在运行时当作函数被调用,传入下列3个参数:
1、对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
2、参数的名字。
3、参数在函数参数列表中的索引。
function logParams(params:any){return function(target:any,methodName:any,paramsIndex:any){console.log(params);//furconsole.log(target);//objectconsole.log(methodName);//getDataconsole.log(paramsIndex);//0target.apiUrl=params;}
}class HttpClient{ public url:any |undefined;constructor(){} getData(@logParams('fur') uuid:any){ console.log(uuid);}}var http:any = new HttpClient();
http.getData("furfur");//furfur
console.log( http.apiUrl);//fur
↓↓↓
typeScript系列学习文章目录
三分钟快速了解typeScript的装饰器相关推荐
- 三分钟快速了解typeScript 类
typeScript 类 类描述了所创建的对象共同的属性和方法. 类的定义 继承 类里面的修饰符 静态属性 静态方法 抽象类 继承 多态 类的定义 class person {name:string; ...
- 三分钟快速了解typeScript接口
typeScript接口 属性类接口 函数类型接口 可索引接口 类类型接口 接口扩展 接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通 ...
- 三分钟快速了解typeScript数据类型
前言: TypeScript 是由微软开发的一款开源的编程语言. TypeScript 是 Javascript 的超级,遵循最新的 ES6.ES5 规范 TypeScript 扩展了JavaScri ...
- 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门
概述 使用Spring 提供的 Spring Data Redis 操作redis 必然要使用Spring提供的模板类 RedisTemplate, 今天我们好好的看看这个模板类 . RedisTem ...
- Angular2入门:TypeScript的装饰器
Angular2入门:TypeScript的装饰器 转载于:https://www.cnblogs.com/lexiaofei/p/9215505.html
- 云小课 | 一个三分钟快速定制OCR应用的神器,要不?
摘要:ModelArts Pro提供了文字识别套件,基于丰富的文字识别算法和行业知识积累,帮助客户快速构建满足不同业务场景需求的文字识别服务.三分钟即可快速定制OCR服务,实现多种版式图像的文字信息结 ...
- 调音台docker教程_威联通Docker教程 篇二:三分钟安装精美的音乐播放器 MusicPlayer!Container Station系列教程!...
威联通Docker教程 篇二:三分钟安装精美的音乐播放器 MusicPlayer!Container Station系列教程! 2020-04-15 11:01:02 67点赞 529收藏 47评论 ...
- 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block
文章目录 三分钟快速了解CSS Display的属性:Block,Inline,Inline-Block Block Inline Inline-block Block,Inline,Inline-B ...
- React 中 TypeScript 和装饰器及 Hooks
概念 TypeScript 是强类型语言,相对于JavaScript 弱类型语言,它具有类型检测的功能,扩展了JavaScript 的语法. TS的安装与执行: //全局安装typescript np ...
最新文章
- 自动驾驶出租车可行性研究报告:2020年能成真吗?
- 分治习题--九章算法培训课第三章笔记
- libtorch demo
- jsp内置对象与el内置对象
- 用g++编译生成动态连接库*.so的方法及连接
- MEF实现设计上的“松耦合”(一)
- 一文总结GaussDB通信原理知识
- linux屏幕怎么放大_02|初始Linux——Windows与Linux区别
- finder怎么才能找到library
- 如何用 Python 从 0 开始创建一个区块链?
- SpringBoot + iframe 前后端实现简单实用的下载文件、导出excel案例
- adams c语言,adams2013编译c语言用户子程序生成dll超详细教程讲解.docx
- Android 电话的国家代码
- 1362:家庭问题(family)
- 高斯公式_注解_高数
- IntelliJ IDEA 绝对好用快捷键
- (iphone铃声制作)i39 for mac破解版永久激活方法
- 【shell】How can I create a select menu in a shell script?
- PDF文件怎么在线拆分?教你在线拆分方法
- WAP中利用截取手机号码达到自动登入的一段源码(转)
热门文章
- requests使用代理IP
- LeetCode/LintCode 题解丨一周爆刷字符串:旋转字符数组
- Android短信数据库相关
- 微信怎么屏蔽他人的朋友圈?图文教学,1分钟学会
- 密码套件cipher suite
- 2019 中科院 JCR 推荐 期刊 列表 计算机部分
- 2022年常见遥感类期刊JCR分区与影响因子汇总
- 软件测试bug日志信息,软件测试bug收集策略 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- C#实现QQ扫码登录
- java如何创建一个文本框_如何创建绑定到对象的文本框