定义:修饰器是一个对类进行处理的函数,用来修改类的行为
<注>:装饰器只能用来修改类及类的方法
类的装饰:
- 静态属性:只能通过类访问,修饰函数直接在类上操作
@testable class MyTestableClass { // ... } function testable(target) { target.isTestable = true; } MyTestableClass.isTestable // true
<注>1)testable
函数的参数target
是MyTestableClass
类本身。
2)修饰器也可以接受参数:这就等于可以修改修饰器的行为
function testable(isTestable) { return function(target) { target.isTestable = isTestable; } } @testable(true) class MyTestableClass {} MyTestableClass.isTestable // true @testable(false) class MyClass {} MyClass.isTestable // false
- 实例属性:可以在实例中访问,对类的prototype对象进行操作
function testable(target) { target.prototype.isTestable = true; } @testable class MyTestableClass {} let obj = new MyTestableClass(); obj.isTestable // true
类方法的修饰
class Person { @readonly name() { return `${this.first} ${this.last}` } } function readonly(target, name, descriptor){ // descriptor对象原来的值如下 // { // value: specifiedFunction, // enumerable: false, // configurable: true, // writable: true // }; descriptor.writable = false; return descriptor; }
<注>:修饰器第一个参数是类的原型对象,第二个参数是所要修饰的属性名,第三个参数是该属性的描述对象。