定义:修饰器是一个对类进行处理的函数,用来修改类的行为
<注>:装饰器只能用来修改类及类的方法
类的装饰:
-
静态属性:只能通过类访问,修饰函数直接在类上操作
@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;
}