装饰器语法
- 没参数 @方法名称
- 有参数 @方法名称(参数)
ts装饰器以关键字@开头 必须在class 中
装饰器就是一个函数 在ts编译成js时执行
1.类装饰器
//定义装饰器
const testClass = (params?:any)=>(target:any)=>{
//设置目标类Test value 为装饰器传进来的参数
target.prototype.value = params
}
// 调用普通装饰器
@testClass('测试')
class Test {
value:any
}
let test = new Test()
console.log(test.value)
类装饰器实用案例
不太容易看懂,建议跟着代码敲一遍。
/**
* 类装饰器重载构造函数
* 类装饰器表达式会在运行时当作函数被调用,类的构造函数作为其唯一的参数
* 如果类装饰器返回一个值,它会使用提供的构造函数来替换类的声明
* @param params 参数
* @param target HttpClient 原型
* @returns 用返回的类重写构造函数
*/
const logClass = (params:any)=> (target:any)=>{
return class extends target{
params = params
apiUrl = '修改后的apiUrl'
testAttribute = '测试添加属性'
getData(){
// 覆盖 getData 方法
this.apiUrl += '----'
console.