类装饰
@add
class My {
}
function add(target) { // 修饰类的时候 target指代的就是类
target.flag = 'ok'
}
console.log(My.flag) // ok
属性装饰
class Circle {
@readonly PI = 3.14 // 不可修改
}
function readonly(target,key,descriptor) {
// target:类的原型 key:PI descriptor:描述器
descriptor.writable = false;
return descriptor //必须返回一个描述对象
}
let c = new Circle();
c.PI = 100 //会报错
原型的上的方法的装饰器
class Person{
@say
say(){
console.log('哈哈')
}
}
function say(target,key,descriptor) {
let oldSay = descriptor.value
descriptor.value = function () { //修改方法
console.log('start say');
oldSay(); //调用旧方法
console.log('end say');
}
}
let p = new Person;
p.say();
淘宝FED:ES7 Decorator 装饰者模式