装饰器是一种特殊类型的声明,它能够被附加到类、方法、属性或参数上,可以修改类的行为,通俗地讲装饰器就是一种方法,可以注入类、方法、属性或参数来扩展类、方法、属性或参数的功能。常见的装饰器有属性装饰器、方法装饰器、参数装饰器、类装饰器。
装饰器的写法:普通装饰器(无法传参)、装饰器工厂(可传参),装饰器是ES7的标准特性之一。
装饰器的执行顺序:属性>方法>方法参数>类。
属性装饰器会被应用到属性描述上,可以用来监视、修改或者替换属性的值。
属性装饰器会在运行时传入下列两个参数:
(1)对于静态成员来讲是类的构造函数,对于实例成员来讲是类的原型对象。
(2)成员的名字。
属性装饰器如代码示例4-42所示。
代码示例4-42
方法装饰器会被应用到方法描述上,可以用来监视、修改或者替换方法定义。
方法装饰器会在运行时传入下列3个参数:
(1)对于静态成员来讲是类的构造函数,对于实例成员来讲是类的原型对象。
(2)成员的名字。
(3)成员的属性描述符。
方法装饰器如代码示例4-43所示。
代码示例4-43
参数装饰器表达式会在运行时当作函数被调用,可以使用参数装饰器为类的原型增加一些元素数据,传入下列3个参数:
(1)对于静态成员来讲是类的构造函数,对于实例成员来讲是类的原型对象。
(2)方法的名字。
(3)参数在函数参数列表中的索引。
参数修饰器如代码示例4-44所示。
代码示例4-44
类装饰器:普通装饰器(无法传参),如代码示例4-45所示。
代码示例4-45
类装饰器:装饰器工厂(可传参),如代码示例4-46所示。
代码示例4-46