/**
* 装饰器永远是个方法,方法的装饰器,里面的三个参数是规定好的
*
* @param target 普通方法 target 对应的是类的 prototype
* 静态方法 target 对应的是类的构造函数
*
* @param key 装饰方法的名字
*
* @param descriptor
*/
function getNameDecorator(target: any, key: string, descriptor: PropertyDescriptor) {
// console.log(target, key, descriptor);
descriptor.writable = false;
}
class Test{
name: string;
constructor(name: string) {
this.name = name;
}
// 方法装饰器
@getNameDecorator
getName() {
return this.name
}
}
const test = new Test('dell');
// 这里对 getName 做了修改,打印出 123
// test.getName = () => {
// return '123'
// }
// console.log( test.getName() );
// 如果想不允许对这个 getName 做修改,就可以在装饰器里面进行修饰, writable 改成 false 就不能改了
test.getName = () => {
return '123'
}
console.log(test.getName());
// 这个时候会报错,改成 true ,则不会报错