示例代码:
const PropertyDecorator: PropertyDecorator = (target: Object,propertyKey: string | symbol) => {// 测试参数// console.log(target)// console.log(propertyKey)};const ParamsDecorator: ParameterDecorator = (target: Object,propertyKey: string | symbol,parameterIndex: number) => {console.log(parameterIndex);};// 属性装饰器和参数装饰器class Player {// 创建一个属性// 使用一个属性装饰器@PropertyDecoratorpublic username: string = 'admin';//参数修饰器public run(idx: number, @ParamsDecorator keywords: string): void {console.log('run方法正在被执行');// console.log(this.username)}}new Player().run(100, '小明');
通过属性属性符来劫持属性,并且将属性值都改为小写:
// 属性修饰符
let value: string = 'hello,world';
const propertyDecorator: PropertyDecorator = (
target: object,
propertyName: string | symbol,
) => {
Object.defineProperty(target, propertyName, {
get() {
return value.toLowerCase();
},
set(v) {
value = v;
}
});
};
class Player {
@propertyDecorator
public username: string | undefined;
}
const p = new Player();
console.log(p.username);
p.username = 'ABC';
console.log(p.username);
