2 装饰器
约 548 字大约 2 分钟
2025-06-18
装饰器本质是一种特殊的函数,它可以对:类、属性、方法、参数进行扩展,同时能让代码更简洁。 装饰器自2015年在ECMAScript-6中被提出到现在,已将近10年。 截止目前,装饰器依然是实验性特性,需要开发者手动调整配置,来开启装饰器支持。
装饰器有5种:
- 类装饰器
- 属性装饰器
- 方法装饰器
- 访问器装饰器
- 参数装饰器 备注:虽然TypeScript5.0中可以直接使用类装饰器,但为了确保其他装饰器可用,现阶段使用时,仍建议使用experimentalDecorators配置来开启装饰器支持,而且不排除在来的版本中,官方会进一步调整装饰器的相关语法!
装饰器就是函数,参数是被装饰的对象
类装饰器
类装饰器是一个应用在类声明上的函数,可以为类添加额外的功能,或添加额外的逻辑
function CustomString(target:Function){
target.prototype.tostring = function(){
return JsoN.stringify(this)
}
// object.seal(target.prototype) //seal封锁,封锁后的类无法被扩展即不能被prototype获取出来对其属性进行更改
}
@Customstring
class Person {
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
}
const p1 = new Person('张三',18) //打印的是json形式的张三
console.log(p1.tostring())
prototype是原型的意思,相当于java中反射的class
类装饰器有返回值:若类装饰器返回一个新的类,那这个新类将替换掉被装饰的类。 类装饰器无返回值:若类装饰器无返回值或返回undefined,那被装饰的类不会被替换。
在 JavaScript 和 TypeScript 中,类实际上是一个特殊的函数。当定义一个类时,实际上是在创建一个构造函数。
一个对象可以有多个装饰器来装饰
函数装饰器
函数装饰器的类型时MethodDecorator
const showDecorator: MethodDecorator = (...args: any[]) => {
console.log(args);
}
class User {
@showDecorator
public show() { }
}
使用此装饰器获取函数的信息
静态函数装饰器
和普通函数使用装饰器没有区别
贡献者
版权所有
版权归属:PinkDopeyBug