全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

装饰器专题

专题说明

本专题涵盖TypeScript装饰器的核心知识,包括类装饰器、方法装饰器、属性装饰器、参数装饰器、访问器装饰器等各类装饰器的使用与实现原理,以及装饰器组合、装饰器工厂、元数据反射等进阶技巧。

学习目标

  1. 掌握五类装饰器(类/方法/访问器/属性/参数)的使用
  2. 理解装饰器的执行顺序与装饰器组合机制
  3. 能够使用装饰器实现AOP与依赖注入

学习建议

装饰器是实验性功能,需在tsconfig.json中启用experimentalDecorators。

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
判断题

类装饰器接收的参数是类的构造函数,返回值可以是 void 或者一个新的构造函数。

A

B

2
判断题

使用类装饰器扩展类后,原始类的实例化方式(new 操作符)不需要做任何改变。

A

B

3
单选题

关于类装饰器的执行时机,以下说法正确的是?

A

类装饰器在创建类实例时执行

B

类装饰器在类定义时被执行一次

C

类装饰器在每次调用类方法时执行

D

类装饰器在模块加载时每秒执行一次

4
单选题

使用类装饰器为类添加静态方法,正确的实现方式是?

A

修改 constructor.prototype 添加方法

B

直接在构造函数上添加方法属性

C

使用 Object.defineProperty 在原型上定义

D

必须返回全新的类定义

5
多选题

以下哪些场景适合使用类装饰器实现?

A

为类的所有实例添加共享方法

B

拦截类的构造函数调用

C

为类添加静态属性或方法

D

修改类实例的属性访问行为

6
判断题

方法装饰器只能接收三个参数:原型对象、方法名和方法的描述符。

A

B

7
判断题

当方法装饰器应用于静态方法时,target 参数是该类的构造函数而非原型对象。

A

B

8
单选题

使用方法装饰器实现日志记录时,正确的做法是?

A

直接修改原方法体添加 console.log

B

在 descriptor.value 中包装原方法,在调用前后记录日志

C

使用 Object.defineProperty 删除原方法

D

在类的构造函数中添加日志逻辑

9
单选题

使用方法装饰器实现权限校验时,如果校验失败应该?

A

抛出异常阻止方法执行

B

返回 undefined 但不记录任何信息

C

返回 null 继续执行后续逻辑

D

静默跳过方法调用

10
多选题

以下哪些是方法装饰器的典型应用场景?

A

日志记录与性能监控

B

修改方法参数类型

C

权限校验与安全拦截

D

事务管理与错误重试

11
判断题

访问器装饰器可以同时应用于 getter 和 setter,它们共享同一个属性描述符。

A

B

12
判断题

访问器装饰器的参数签名与方法装饰器完全相同。

A

B

13
单选题

使用访问器装饰器实现属性懒加载,正确的做法是?

A

在 descriptor.get 中检查缓存,未命中时计算并缓存

B

在 descriptor.set 中检查缓存

C

删除 descriptor.get 并直接赋值

D

在类的构造函数中初始化所有属性

14
单选题

使用访问器装饰器实现只读属性拦截,应该修改 descriptor 的哪个部分?

A

descriptor.writable = false

B

descriptor.set 设为 undefined 或抛出异常

C

descriptor.enumerable = false

D

descriptor.configurable = false

15
多选题

以下哪些场景适合使用访问器装饰器实现?

A

属性值的格式化和验证

B

方法执行时间的统计

C

敏感数据访问的审计日志

D

属性变更的通知机制

16
判断题

属性装饰器接收参数描述符(PropertyDescriptor)作为第三个参数。

A

B

17
判断题

属性装饰器应用于类的静态属性时,target 参数是类的构造函数。

A

B

18
单选题

使用属性装饰器实现字段校验,正确的实现思路是?

A

在装饰器中直接修改属性值

B

使用 Object.defineProperty 将属性替换为带校验的 getter/setter

C

在类的构造函数中重写所有属性

D

删除原始属性并添加新方法

19
单选题

属性装饰器常用于实现元数据注入,以下方式正确的是?

A

将元数据存储在 prototype 上的专属对象中

B

修改原始属性值来存储元数据

C

在全局变量中维护所有属性的元数据

D

使用 Reflect.defineProperty 定义新属性

20
多选题

以下哪些是属性装饰器的典型用途?

A

字段非空校验

B

方法执行性能监控

C

属性序列化/反序列化标记

D

ORM 实体列定义映射

← 上一个专题 类型系统专题
下一个专题 → 高阶工具类型专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库