ES6 - 装饰器 - Decorater
|
|
注意,修饰器对类的行为的改变,是代码编译时发生的,而不是在运行时。这意味着,修饰器能在编译阶段运行代码。也就是说,修饰器本质就是编译时执行的函数。
|
|
|
修饰器是一个对类进行处理的函数。修饰器函数的第一个参数,就是所要修饰的目标类
|
|
|
如果想添加实例属性,可以通过目标类的prototype对象操作。
|
|
把Foo类的方法添加到了MyClass的实例上面
|
可以用Object.assign()模拟这个功能。
|
|
方法的修饰
|
修饰器函数一共可以接受三个参数,第一个参数是所要修饰的目标对象,即类的实例(这不同于类的修饰,那种情况时target参数指的是类本身);第二个参数是所要修饰的属性名,第三个参数是该属性的描述对象。
|
|
方法修饰的作用
|
修改属性描述对象的enumerable属性,使得该属性不可遍历
@log修饰器,可以起到输出日志的作用
修饰器有注释的作用
|
|
不能应用于 函数
|
因为函数存在提升
|
|
core-decorator.js
|
autobind修饰器使得方法中的this对象,绑定原始对象
readonly修饰器使得属性或方法不可写。
override修饰器检查子类的方法,是否正确覆盖了父类的同名方法,如果不正确会报错
deprecate或deprecated修饰器在控制台显示一条警告,表示该方法将废除
suppressWarnings修饰器抑制deprecated修饰器导致的console.warn()调用。但是,异步代码发出的调用除外
|
|
使用修饰器实现自动发布事件
|
import publish from "path/to/decorators/publish";
class FooComponent {
@publish("foo.some.message", "component")
someMethod() {
return {
my: "data"
};
}
@publish("foo.some.other")
anotherMethod() {
// ...
}}
以后,只要调用someMethod或者anotherMethod,就会自动发出一个事件
|
|
Mixin
|
混入
|
|
Trait
|
Trait 也是一种修饰器,效果与 Mixin 类似,但是提供更多功能,比如防止同名方法的冲突、排除混入某些方法、为混入的方法起别名等等
|
|
Babel转码器
|
已经支持 Decorator
目前,Babel 转码器已经支持 Decorator。
首先,安装babel-core和babel-plugin-transform-decorators。由于后者包括在babel-preset-stage-0之中,所以改为安装babel-preset-stage-0亦可。
$ npm install babel-core babel-plugin-transform-decorators
然后,设置配置文件.babelrc。
{"plugins": ["transform-decorators"]}
这时,Babel 就可以对 Decorator 转码了。
脚本中打开的命令如下。
babel.transform("code", {plugins: ["transform-decorators"]})
Babel 的官方网站提供一个在线转码器,只要勾选 Experimental,就能支持 Decorator 的在线转码。
|
ES6 - 装饰器 - Decorater的更多相关文章
- ES6装饰器Decorator基本用法
1. 基本形式 @decorator class A {} // 等同于 class A {} A = decorator(A); 装饰器在javascript中仅仅可以修饰类和属性,不能修饰函数.装 ...
- es6 装饰器decorator的使用 +webpack4.0配置
decorator 装饰器 许多面向对象都有decorator(装饰器)函数,比如python中也可以用decorator函数来强化代码,decorator相当于一个高阶函数,接收一个函数,返回一个被 ...
- 从ES6重新认识JavaScript设计模式: 装饰器模式
1 什么是装饰器模式 向一个现有的对象添加新的功能,同时又不改变其结构的设计模式被称为装饰器模式(Decorator Pattern),它是作为现有的类的一个包装(Wrapper). 可以将装饰器理解 ...
- ES6 系列之我们来聊聊装饰器
Decorator 装饰器主要用于: 装饰类 装饰方法或属性 装饰类 @annotation class MyClass { } function annotation(target) { targe ...
- ES6学习之装饰器
定义:修饰器是一个对类进行处理的函数,用来修改类的行为 <注>:装饰器只能用来修改类及类的方法 类的装饰: 静态属性:只能通过类访问,修饰函数直接在类上操作 @testable class ...
- Python基础篇【第6篇】: Python装饰器
装饰器 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类, ...
- 基于TypeScript装饰器定义Express RESTful 服务
前言 本文主要讲解如何使用TypeScript装饰器定义Express路由.文中出现的代码经过简化不能直接运行,完整代码的请戳:https://github.com/WinfredWang/expre ...
- TypeScript装饰器(decorators)
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,可以修改类的行为. 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被 ...
- JS 装饰器解析
随着 ES6 和 TypeScript 中类的引入,在某些场景需要在不改变原有类和类属性的基础上扩展些功能,这也是装饰器出现的原因. 装饰器简介 作为一种可以动态增删功能模块的模式(比如 redux ...
随机推荐
- ASM ClassReader failed to parse class file
ASM ClassReader failed to parse class file - probably due to a new Java class file version that isn' ...
- mysql#自定义序列
原文 mysql主键不用自增数字的时候,可以参考如下方式,我抄来的. -- 创建公共的序列表 DROP TABLE IF EXISTS t_common_sequence; CREATE TABLE ...
- Day8 - C - Largest Rectangle in a Histogram HDU - 1506
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...
- C语言数组成绩排序
#include<stdio.h> #define N 10 int main() { int s,i,j,tmp; int a[10]={78,56,38,99,81,86,39,100 ...
- Eclipse 导入 Tomcat 源码
我的环境:Win10,Eclipse 4.8.0 Photon,JDK 10.0.2 1.下载Tomcat源码 我下载的是:apache-tomcat-9.0.12-src.zip 下载地址:ht ...
- 【Unity】稍微说一下关于各种坐标的转换。比如WorldToScreenPoint
之前写了一篇关于在物体头顶上显示名字的随笔. 估计难懂的点就在各种坐标的转换. 这里详细(就我这水平,怎么可能详细~~~)解说一下.额............. 用另一种方式举个栗子吧. 还是实现在物 ...
- sklearn的train_test_split()各函数参数含义解释(非常全)
sklearn之train_test_split()函数各参数含义(非常全) 在机器学习中,我们通常将原始数据按照比例分割为“测试集”和“训练集”,从 sklearn.model_selection ...
- 攻防世界web新手练习区(2)
弱认证:http://111.198.29.45:43769/ 打开是这个页面: 用户名输入1,密码输入2,试试看.会提示你用户名为admin.接下来用burp对密码进行爆破,发现弱口令0123456 ...
- PWM与时间片思想
改编自:http://www.moz8.com/thread-79049-1-1.html 什么是PWM? PWM:脉冲宽度调制,由于在数字电路(或者单片机)输出模拟信号的成本高昂,换句话说,受制于只 ...
- ZCGL项目解析——概述
模块清单 微服务模块:routeservice.eurekaservice.configservice 数据服务模块:fdfsservice.hbaseservice 工具服务模块:common 系统 ...