属性装饰器
function decorate(param:any){
param.prototype.test='zz'
}
@decorate
class Test{
public name:string;
constructor(name:string){
this.name=name;
}
}
var x=new Test('zz')
console.log(x.test)
//打印xx
还有一种是写在属性上面
function decorate(param:any){
return function(target,attr){
console.log(target)
console.log(attr)
target.attr=param;
}
}
class Test{
@decorate('xx')
public name:string;
constructor(name:string){
this.name=name;
}
}
var x=new Test('zz')
console.log(x)
//{name:'xx'}
类装饰器
function decorate(target:any){
return class extends target{
name="cc"
}
}
@decorate
class Test{
public name:string;
constructor(name:string){
this.name=name;
}
}
var x=new Test('zz')
console.log(x)
//{name:'cc'}
方法装饰器
function decorate(param:any){
return function(target:any,methodName:any,desc:any){
console.log(target)//类
console.log(param)//参数
console.log(methodName)//方法名
var oMethod=desc.value;
console.log(oMethod)//方法
desc.value=()=>{console.log('修改后的方法')}
}
}
class Test{
public name:string;
constructor(name:string){
this.name=name;
}
@decorate("yy")
add(){
console.log(12)
}
}
var x=new Test('zz')
x.add()
//修改后的方法
参数装饰器
function decorate(param:any){
return function(target:any,methodName:any,paramsIndex:any){
console.log(target)//类
console.log(param)//参数
console.log(methodName)//方法名
console.log(paramsIndex)
}
}
class Test{
public name:string;
constructor(name:string){
this.name=name;
}
add(@decorate('xx') str:string){
console.log(str)
}
}
var x=new Test('zz')
x.add('yy')
//yy