TypeScript 素描 - 装饰器
/*
装饰器 简单理解为C#中的Attribute
可以装饰到类、函数、讯问符、属性、参数上 语法 @xxx
装饰器其实是一个函数 @xxx 就要有一个 function xxx
多个装饰器可以用来装饰一个声明, @f @g arg
或者在多行上
@f
@g
x
这样的组合最后的结果将会是 f(g(x))
装饰器的执行顺序
1、参数装饰器,然后依次是方法装饰器,访问器装饰器,或属性装饰器应用到每个实例成员。
2、参数装饰器,然后依次是方法装饰器,访问器装饰器,或属性装饰器应用到每个静态成员。
3、参数装饰器应用到构造函数。
4、类装饰器应用到类。 装饰器目前是实验性的功能,可能在以后的某个版本就会移除.默认也是不开启装饰器功能的
我们手动的到tsconfig中配置experimentalDecorators为true
*/ /**
* 一个简单的方法装饰器 参数
target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象
propertyKey 成员的名字 这里是method
descriptor 成员的属性描述符
如果方法装饰器返回一个值 ,它会被用作方法的塑形描述符
*/
function f() { //当调用C类method方法时其执行顺序是
console.log("f(): evaluated"); //-- 1
return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
console.log("f(): called"); //--4
}
} function g() {
console.log("g(): evaluated"); //--2
return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
console.log("g(): called"); //--3
}
} class C {
@f()
@g()
method() { } // --5
} /*
类装饰器 参数
constructor 构造函数
类装饰器在类声明之前被声明,如果返回一个值(新的构造函数) ,它会使用提供的构造函数来
替换类的声明
*/
function classDecorator(constructor: Function) { } @classDecorator
class B {
constructor(message: string) { }
} /*
访问器装饰器
用来装饰Get; Set 需要注意的是装饰第一个访问器就可以了,它默认装饰Get Set
target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象
propertyKey 成员的名字 这里是method
descriptor 成员的属性描述符
如果访问器装饰器返回一个值,它会被用作方法的属性描述符。
*/
function Decorator(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
}
class D {
private _x: number; @Decorator
get x() { return this._x }; set x(value: number) { this._x = value };
} /*
属性装饰器 参数
target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
propertyKey 成员的名字。
如果访问符装饰器返回一个值,它会被用作方法的属性描述符。
*/ /*
参数装饰器
target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
propertyKey 成员的名字。
parameterIndex 参数在函数参数列表中的索引。 参数装饰器只能用来监视一个方法的参数是否被传入,并不能拿到值,数装饰器的返回值会被忽略。
*/
function argDecorator(target: Object, propertykey: string | symbol, parameterIndex: number) { }
function fun( @argDecorator name: string) { }
TypeScript 素描 - 装饰器的更多相关文章
- TypeScript 中装饰器的理解?应用场景?
一.是什么 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上 是一种在不改变原类和使用继承的情况下,动态地扩展对象功能 同样的,本质也不是什么高大上的结构,就是一个普通的 ...
- typescript - 9.装饰器
装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为. 通俗的讲装饰器就是一个方法,可以注入到类.方法.属性参数上来扩展类.属性.方法.参数的功能. 常见的装 ...
- 从C#到TypeScript - 装饰器
总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...
- TypeScript装饰器(decorators)
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,可以修改类的行为. 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被 ...
- Angular 个人深究(一)【Angular中的Typescript 装饰器】
Angular 个人深究[Angular中的Typescript 装饰器] 最近进入一个新的前端项目,为了能够更好地了解Angular框架,想到要研究底层代码. 注:本人前端小白一枚,文章旨在记录自己 ...
- 转发: Angular装饰器
Angular中的装饰器是一个函数,它将元数据添加到类.类成员(属性.方法)和函数参数. 用法:要想应用装饰器,把它放在被装饰对象的上面或左边. Angular使用自己的一套装饰器来实现应用程序各部件 ...
- JS中bind、call和apply的作用以及在TS装饰器中的用法
目录 1,前言 1,call 1.1,例子 1.2,直接调用 1.3,将this指向另一个对象 1.4,传递参数 2,apply 2.1,例子 2.2,直接调用 2.3,将this指向另一个对象 2. ...
- 基于TypeScript装饰器定义Express RESTful 服务
前言 本文主要讲解如何使用TypeScript装饰器定义Express路由.文中出现的代码经过简化不能直接运行,完整代码的请戳:https://github.com/WinfredWang/expre ...
- Typescript中的装饰器原理
Typescript中的装饰器原理 1.小原理 因为react中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...
随机推荐
- SQL 使用Cursor(游标)遍历结果集
使用Cursor(游标)可以在存储过程中遍历select 结果集,对其进行相关的操作. Cursor(游标)语法格式 DECLARE 游标名称 CURSOR FOR SELECT 字段1,字段2,字段 ...
- Java基础知识强化88:BigDecimal类之BigDecimal类引入和概述 以及 BigDecimal的使用(加减乘除)
1. BigDecimal类概述: 由于在运算的时候,float类型和double很容易丢失精度.所以为了能够精确的表达.计算浮点数,Java提供了BigDecimal. BigDecimal:不可变 ...
- jQuery源代码 解析一 工具方法
1. 外层沙箱以及命名空间$ 几乎稍微有点经验前端人员都这么做,为了避免声明了一些全局变量而污染,把代码放在一个"沙箱执行",然后在暴露出命名空间(可以为API,函数,对象): 2 ...
- SQL 结构化查询语言手册
摘自该学习网站: http://www.w3school.com.cn/sql/ 新学到的几点: and 和or 连用,记得用括号. 2.SQL通配符补充 例如: ...
- linux elinks命令
Elinks是基于文本的免费浏览器,用于Unix及基于Unix的系统.Elinks支持 HTTP,HTTP Cookies以及支持浏览Perl和Ruby脚本.也很好的支持选项卡浏览.最棒的是它支持鼠标 ...
- RHEL7查看网卡配置命令ip addr show
Validating Network Address Configuration To verify the configuration of the network address, you nee ...
- mui实现支付宝支付功能
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>H ...
- Universal-Image-Loader 基本使用
简介 https://github.com/nostra13/Android-Universal-Image-Loader 项目的结构:每一个图片的加载和显示任务都运行在独立的线程中,除非这个图片缓存 ...
- linux的comm命令
http://blog.csdn.net/apache6/article/details/5789669
- 学习WCF(1)
1. 什么是WCF WCF是创建面向服务应用程序的一个框架,用WCF, 你可以发送异步消息. 一个服务的终结点可以是服务宿主在IIS上面,也可以是一个服务宿主在应用程序上面.一个终结点也可以是客户端的 ...