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中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...
随机推荐
- HTTPS 详解
1) HTTPS是什么 https 是超文本传输安全协议的缩写.HTTPS主要思想是在不安全的网络上创建一种安全的信道,并且可以在使用适当的加密包和服务器证书可被验证且可被信任时候,对窃听和中间人攻击 ...
- 【转】app瘦身
iPhone经过这几年的发展,已经发生了很大的变化,例如屏幕变得更加多样,尺寸更多,内存变得更大,CPU的架构也在变化.伴随着iPhone的变化,iOS也在变化,例如AutoLayout.size c ...
- MVC项目,系统找不到指定的文件。(异常来自 HRESULT:0x80070002)
今天在用Visual Studio新建MVC项目的时候,遇到错误 系统找不到指定的文件.(异常来自 HRESULT:0x80070002) 解决办法:工具--> 扩展和更新 -->联机(V ...
- div中英文无法自动换行的解决办法
在一个设定好宽度的div中,当我们输入的中文文字长度超过了设定宽度时,会自动换到下一行. 但是,如果输入的是英文字母,那么,无论你div设定宽度为多少,英文字母都是不换行直接在同一行输出,导致di ...
- Lesson 3: The Amazing New Mobile Web
Lesson 3: The Amazing New Mobile Web Article 1: This is Responsive by Brad Frost 各种响应式网站设计的资源. Artic ...
- MetInfo操作笔记
1.去版权(前台) 文件路径:templates/模板名称/foot.php <div class="powered_by_metinfo">Powered by &l ...
- JQUERY1.9学习笔记 之基本过滤器(一) 动态选择器
动态选择器:animated Selector 描述:当选择器运行时,选择动态进程中的所有元素.(对动态进程起作用) jQuery( ":animated" ) 注释::anima ...
- Ubuntu 12.04(32位)下PHP环境的搭建(LAMP)
Ubuntu 12.04 32位 下默认安装为5.3.10 不是以下图文中的5.4 1.首先打开命令行,切换到root身份,获得最新的软件包 su root sudo apt-get install ...
- PHP判断是否微新浏览器
$inwechat = false; $user_agent = $_SERVER['HTTP_USER_AGENT']; if (strpos($user_agent, 'MicroMessenge ...
- linux 命令行更新sdk
./android list sdk --proxy-host android-mirror.bugly.qq.com --proxy-port 8080 --no-ui -a -s ./androi ...