装饰器是JavaScript中用于动态修改类、方法、属性或参数行为的函数,通过@符号应用,在定义时执行。它支持类、方法、访问器、字段和参数的增强,如使用@log为方法添加日志与性能监控,@sealed冻结类结构,@injectable实现自动注册,结合Reflect Metadata可完成依赖注入。尽管处于ECMAScript第3阶段,但TypeScript和Babel已支持其使用,能提升代码的声明性和可维护性。

JavaScript 装饰器是一种强大的元编程工具,允许你在类、方法、属性或参数定义时动态地修改其行为。虽然目前装饰器仍处于 ECMAScript 提案阶段(第3阶段),但通过 Babel 或 TypeScript 已可实际使用。掌握装饰器能让你写出更简洁、可复用且逻辑清晰的代码。
装饰器本质上是一个函数,用来“包装”或“注解”类及其成员。它在代码定义时执行,而非运行时调用。语法使用 @ 符号加函数名,写在目标上方。
装饰器可以应用于:
例如:
立即学习“Java免费学习笔记(深入)”;
@sealed最常见的用途之一是给方法添加日志或耗时统计。方法装饰器接收三个参数:目标对象、属性名、属性描述符。
实现一个 log 装饰器:
function log(target: any, name: string, descriptor: PropertyDescriptor) {应用后,每次调用该方法都会自动输出参数和执行时间,无需侵入业务逻辑。
类装饰器接收构造函数作为唯一参数,适合用于配置整个类的行为。
比如,创建 sealed 装饰器防止类被扩展:
function sealed(constructor: Function) {也可以用于依赖注入系统中自动注册服务:
const services: Function[] = [];启动时遍历 services 数组完成注册,实现模块自动发现。
属性装饰器可用于监听字段变化或做类型标记。参数装饰器常用于框架中标记依赖来源。
例如,在 Angular 风格的依赖注入中:
function Inject(token: string) {结合 Reflect Metadata API,可以在运行时读取这些注解信息,实现自动解析依赖。
基本上就这些。装饰器让 JavaScript 具备了类似 Python 或 Java 注解的能力,极大提升了抽象能力。尽管标准尚未最终落地,但在 TypeScript 项目中已可安全使用。合理运用,能让代码更声明式、易于维护。
以上就是JavaScript装饰器_元编程实战的详细内容,更多请关注php中文网其它相关文章!
编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号