/*
装饰器 简单理解为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 素描 - 装饰器的更多相关文章

  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. js类封装

    将js方法封装成类,好处就是团队开发中避免命名冲突,部分类整理代码如下: function LocalStorageHelper() { //检测浏览器是否支持localStorage this.ch ...

  2. Android实现真正的ViewPager【平滑过渡】+【循环滚动】!!!顺带还有【末页跳转】。

    实现真正的ViewPager[平滑过渡]+[循环滚动]!!!顺带还有[末页跳转]. 首先呢, 我要对网上常见的3种ViewPager的循环滚动方法做个概述.急需看真正实现方法的同志请选择性忽略下面这一 ...

  3. Linux内核启动分析

    张超<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 我的代码可见https://www.shiyanlo ...

  4. 安装VS2013的离线MSDN帮助文档

    作为vs的初学者,安装帮助文档有利于快速掌握.net的基本语法,对于摸索学习的同学帮助很大. VS2013和VS2012的帮助文档目前为止还是一样 下面是下载地址    http://www.micr ...

  5. iOS中解析 XML / JSON

    JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是⼀一种轻量级的数据交换格式 基于⽂文本格式,易于⼈人阅读和编写,同时也易于机器解析和⽣生成. 2. ...

  6. iOS 网络与多线程--5.异步Post方式的网络请求(非阻塞)

    通过Post请求方式,异步获取网络数据,异步请求不会阻塞主线程,而会建立一个新的线程来操作. 代码如下 ViewController.h文件 #import <UIKit/UIKit.h> ...

  7. ubuntu 下源码安装Postgreql pgAdmin3

    一.安装 PostgreSQL 1.安装相关依赖,在终端下执行: sudo apt-get install zlib1g-dev    sudo apt-get install libreadline ...

  8. react相关

    react 简单入门 ant 蚂蚁金服react组件 redux 阮一峰入门react material-ui组件库 webpack入门 http://www.jianshu.com/p/42e115 ...

  9. querySelector选择器

    querySelector选择器可以通过document和element来调用他们 用来代替getElementById var body=document.querySelector("b ...

  10. linux vi 使用脑图