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中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...
随机推荐
- ProGuard 代码混淆
简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...
- CSS 命名规则
CSS书写顺序: 位置属性(position, top, right, z-index,display, float等) 大小(width, height, padding, margin) 文字系列 ...
- Oracle 空间管理
表空间:组数据文件的一种途径 分类: 目录表空间(sysaux) 常表空间(system) 系统临时表空间(temp) 用户临时表空间(user) undo表空间 创建表空间: //表空间名为name ...
- vs连接mysql
1.打开vs2012在aspx中添加一个Grid view 控件,,. 2,选择新建数据源. 3,选择数据库. 4,选择新建连接. 5,更改成mysql连接. 6,这里的Server name 是你自 ...
- state模式理解
state模式应用场景 条件判断很多的情况 比如有很多if else语句:switch case语句等等. 如果以后业务越来越复杂,条件判断有100多个,每种条件的处理逻辑很复杂,不止一个业务逻辑会重 ...
- 3D dungeon
算法:广搜: 描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is comp ...
- php实现获取汉字的首字母实例
//取汉字的asc区间然后返回汉字首字母了,代码如下:header("Content-type: text/html; charset=utf-8"); function getf ...
- 《python基础教程》笔记之 基础知识
数字相关 在Python程序前加上 from __future__ import division 或者在解释器里面直接执行它,或者通过命令行运行Python时使用命令开关-Qnew,会使单斜线不再整 ...
- C程序设计语言练习题1-19
练习1-19 编写函数reverse(s),将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序.代码如下: #include <stdio.h> // ...
- C# 文件读写异常“正由另一进程使用,因此该进程无法访问该文件”
最近在对文件进行读写操作时,利用using的方法可还是遇到了异常"文件正由另一进程使用,因此该进程无法访问该文件": public bool WriteUserInfo(strin ...