Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第9章:装饰器

第9章:装饰器

装饰器的基本概念

什么是装饰器?

装饰器(Decorator)是一种特殊的声明,能够附加到类、方法、属性或参数上,用于修改或扩展其行为。装饰器本质上是一个函数,通过特定的语法(@expression)应用到目标上,在运行时被调用。

装饰器的核心特点

  1. 声明式语法:使用 @ 符号前缀,简洁直观。
  2. 元编程能力:在不修改原始代码的情况下增强功能(如日志、验证、依赖注入)。
  3. 组合性:支持多个装饰器叠加,按顺序执行。

装饰器的分类

TypeScript 支持以下装饰器类型:

  • 类装饰器:应用于类的构造函数。
  • 方法装饰器:应用于类的方法。
  • 属性装饰器:应用于类的属性。
  • 参数装饰器:应用于方法的参数。
  • 访问器装饰器:应用于 getter/setter。

装饰器的执行时机

装饰器在代码编译阶段(而非运行时)被执行。具体顺序为:

  1. 参数装饰器 → 方法/访问器/属性装饰器 → 类装饰器。
  2. 同一类型的多个装饰器按声明顺序从下到上执行。

基本示例

// 定义一个简单的类装饰器
function logClass(target: Function) {
    console.log(`类装饰器应用到: ${target.name}`);
}

@logClass
class Example {
    // ...
}

装饰器的应用场景

  • 日志记录:自动记录方法调用信息。
  • 权限控制:检查用户权限再执行方法。
  • 依赖注入(如 Angular):自动管理类依赖关系。
  • 数据验证:验证方法参数或属性值。

注意事项

  1. TypeScript 装饰器是实验性特性,需在 tsconfig.json 中启用:
    {
      "compilerOptions": {
        "experimentalDecorators": true
      }
    }
    
  2. 装饰器不能用于函数声明(仅限类相关目标)。
  3. 装饰器的设计需遵循单一职责原则,避免过度复杂化。

扩展阅读:装饰器提案目前处于 ECMAScript 标准化流程的 Stage 3 阶段,未来可能成为 JavaScript 原生语法。

Last Updated:: 3/27/25, 10:50 AM