1. /*
  2. 装饰器 简单理解为C#中的Attribute
  3. 可以装饰到类、函数、讯问符、属性、参数上 语法 @xxx
  4. 装饰器其实是一个函数 @xxx 就要有一个 function xxx
  5. 多个装饰器可以用来装饰一个声明, @f @g arg
  6. 或者在多行上
  7. @f
  8. @g
  9. x
  10. 这样的组合最后的结果将会是 f(g(x))
  11. 装饰器的执行顺序
  12. 1、参数装饰器,然后依次是方法装饰器,访问器装饰器,或属性装饰器应用到每个实例成员。
  13. 2、参数装饰器,然后依次是方法装饰器,访问器装饰器,或属性装饰器应用到每个静态成员。
  14. 3、参数装饰器应用到构造函数。
  15. 4、类装饰器应用到类。
  16.  
  17. 装饰器目前是实验性的功能,可能在以后的某个版本就会移除.默认也是不开启装饰器功能的
  18. 我们手动的到tsconfig中配置experimentalDecorators为true
  19. */
  20.  
  21. /**
  22. * 一个简单的方法装饰器 参数
  23. target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象
  24. propertyKey 成员的名字 这里是method
  25. descriptor 成员的属性描述符
  26. 如果方法装饰器返回一个值 ,它会被用作方法的塑形描述符
  27. */
  28. function f() { //当调用C类method方法时其执行顺序是
  29. console.log("f(): evaluated"); //-- 1
  30. return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
  31. console.log("f(): called"); //--4
  32. }
  33. }
  34.  
  35. function g() {
  36. console.log("g(): evaluated"); //--2
  37. return function (target, propertyKey: string, descriptor: PropertyDescriptor) {
  38. console.log("g(): called"); //--3
  39. }
  40. }
  41.  
  42. class C {
  43. @f()
  44. @g()
  45. method() { } // --5
  46. }
  47.  
  48. /*
  49. 类装饰器 参数
  50. constructor 构造函数
  51. 类装饰器在类声明之前被声明,如果返回一个值(新的构造函数) ,它会使用提供的构造函数来
  52. 替换类的声明
  53. */
  54. function classDecorator(constructor: Function) { }
  55.  
  56. @classDecorator
  57. class B {
  58. constructor(message: string) {
  59.  
  60. }
  61. }
  62.  
  63. /*
  64. 访问器装饰器
  65. 用来装饰Get; Set 需要注意的是装饰第一个访问器就可以了,它默认装饰Get Set
  66. target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象
  67. propertyKey 成员的名字 这里是method
  68. descriptor 成员的属性描述符
  69. 如果访问器装饰器返回一个值,它会被用作方法的属性描述符。
  70. */
  71. function Decorator(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  72. }
  73. class D {
  74. private _x: number;
  75.  
  76. @Decorator
  77. get x() { return this._x };
  78.  
  79. set x(value: number) { this._x = value };
  80. }
  81.  
  82. /*
  83. 属性装饰器 参数
  84. target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
  85. propertyKey 成员的名字。
  86. 如果访问符装饰器返回一个值,它会被用作方法的属性描述符。
  87. */
  88.  
  89. /*
  90. 参数装饰器
  91. target 对于静态成员来说是类的构造函数,对于实例成员是类的原型对象。
  92. propertyKey 成员的名字。
  93. parameterIndex 参数在函数参数列表中的索引。
  94.  
  95. 参数装饰器只能用来监视一个方法的参数是否被传入,并不能拿到值,数装饰器的返回值会被忽略。
  96. */
  97. function argDecorator(target: Object, propertykey: string | symbol, parameterIndex: number) {
  98.  
  99. }
  100. function fun( @argDecorator name: string) {
  101.  
  102. }

TypeScript 素描 - 装饰器的更多相关文章

  1. TypeScript 中装饰器的理解?应用场景?

    一.是什么 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上 是一种在不改变原类和使用继承的情况下,动态地扩展对象功能 同样的,本质也不是什么高大上的结构,就是一个普通的 ...

  2. typescript - 9.装饰器

    装饰器:装饰器是一种特殊类型的声明,它能够被附加到类声明,方法,属性或参数上,可以修改类的行为. 通俗的讲装饰器就是一个方法,可以注入到类.方法.属性参数上来扩展类.属性.方法.参数的功能. 常见的装 ...

  3. 从C#到TypeScript - 装饰器

    总目录 从C#到TypeScript - 类型 从C#到TypeScript - 高级类型 从C#到TypeScript - 变量 从C#到TypeScript - 接口 从C#到TypeScript ...

  4. TypeScript装饰器(decorators)

    装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,可以修改类的行为. 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被 ...

  5. Angular 个人深究(一)【Angular中的Typescript 装饰器】

    Angular 个人深究[Angular中的Typescript 装饰器] 最近进入一个新的前端项目,为了能够更好地了解Angular框架,想到要研究底层代码. 注:本人前端小白一枚,文章旨在记录自己 ...

  6. 转发: Angular装饰器

    Angular中的装饰器是一个函数,它将元数据添加到类.类成员(属性.方法)和函数参数. 用法:要想应用装饰器,把它放在被装饰对象的上面或左边. Angular使用自己的一套装饰器来实现应用程序各部件 ...

  7. 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. ...

  8. 基于TypeScript装饰器定义Express RESTful 服务

    前言 本文主要讲解如何使用TypeScript装饰器定义Express路由.文中出现的代码经过简化不能直接运行,完整代码的请戳:https://github.com/WinfredWang/expre ...

  9. Typescript中的装饰器原理

    Typescript中的装饰器原理 1.小原理 因为react中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...

随机推荐

  1. ProGuard 代码混淆

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  2. CSS 命名规则

    CSS书写顺序: 位置属性(position, top, right, z-index,display, float等) 大小(width, height, padding, margin) 文字系列 ...

  3. Oracle 空间管理

    表空间:组数据文件的一种途径 分类: 目录表空间(sysaux) 常表空间(system) 系统临时表空间(temp) 用户临时表空间(user) undo表空间 创建表空间: //表空间名为name ...

  4. vs连接mysql

    1.打开vs2012在aspx中添加一个Grid view 控件,,. 2,选择新建数据源. 3,选择数据库. 4,选择新建连接. 5,更改成mysql连接. 6,这里的Server name 是你自 ...

  5. state模式理解

    state模式应用场景 条件判断很多的情况 比如有很多if else语句:switch case语句等等. 如果以后业务越来越复杂,条件判断有100多个,每种条件的处理逻辑很复杂,不止一个业务逻辑会重 ...

  6. 3D dungeon

    算法:广搜: 描述 You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is comp ...

  7. php实现获取汉字的首字母实例

    //取汉字的asc区间然后返回汉字首字母了,代码如下:header("Content-type: text/html; charset=utf-8"); function getf ...

  8. 《python基础教程》笔记之 基础知识

    数字相关 在Python程序前加上 from __future__ import division 或者在解释器里面直接执行它,或者通过命令行运行Python时使用命令开关-Qnew,会使单斜线不再整 ...

  9. C程序设计语言练习题1-19

    练习1-19 编写函数reverse(s),将字符串s中的字符顺序颠倒过来.使用该函数编写一个程序,每次颠倒一个输入行中的字符顺序.代码如下: #include <stdio.h> // ...

  10. C# 文件读写异常“正由另一进程使用,因此该进程无法访问该文件”

    最近在对文件进行读写操作时,利用using的方法可还是遇到了异常"文件正由另一进程使用,因此该进程无法访问该文件": public bool WriteUserInfo(strin ...