ES6 -修饰器

修饰器在很多语言中都有,它用来修改类或者方法的行为。请注意,它是在代码编译阶段执行的,而非代码执行阶段执行。

类的修饰

它的工作原理是这样的:

1
2
3
4
5
6
7
@decorator
class A {}

// 等同于

class A {}
A = decorator(A) || A;

即给类添加一个属性,至于是静态属性的还是实例属性就取决于你了。

1
2
3
4
5
6
7
8
9
10
@testable
class MyTestableClass {
// ...
}

function testable(target) {
target.isTestable = true;
}

MyTestableClass.isTestable // true

上面 代码中@testable就是一个Decorator,它的第一个参数是被修饰的类本身,它类MyTestableClass添加了一个静态的属性。如果想要添加实例属性,则可通过目标类的prototype对象操作(对JavaScript的原型模式要熟悉):

1
2
3
function testable(target) {
target.prototype.isTestable = true;
}

方法的修饰

和对类的修时原理相似,只是修饰器函数的参数有变动:

1
2
3
4
5
6
7
8
9
10
11
function decorator(target, name, descriptor){
// descriptor对象原来的值如下
// {
// value: specifiedFunction,
// enumerable: false,
// configurable: true,
// writable: true
// };
//to do something
return descriptor;
}

它相当于:

1
Object.defineProperty(target, 'funName', descriptor);

修饰器参数:

  • target:类的原型对象class.prototype,和修饰类不同是,修饰类的时候target参数指的是类本身。
  • funName:所要修饰的属性名。
  • descriptor:该属性的描述对象。

在方法修饰器中对方法的修饰,只允许通过该方法的属性描述对象来实现。

属性描述对象

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 类的修饰
  2. 2. 方法的修饰
    1. 2.1. 属性描述对象
,