多选题
128【多选题】下列关于@Extend 说法正确的是
A
支持通用属性
B
可以定义在组件外
C
支持通用事件
D
支持使用参数
答案解析
正确答案:ABCD
解析:
该题考查对 ArkTS(或类似声明式 UI 框架,如 OpenHarmony/ArkUI 中)中 `@Extend` 装饰器的理解。需结合其语言规范与实际语义进行严谨分析。
**核心知识点解析:**
`@Extend` 是 ArkTS 中用于扩展内置组件能力的装饰器,本质是为系统内置组件(如 `Text`、`Button` 等)批量添加自定义属性、事件和方法的语法糖机制。其设计目标是提升组件复用性与开发效率,避免重复编写相同逻辑。
逐项分析选项:
**A:支持通用属性**
✓ 正确。
`@Extend` 允许为指定组件类型(如 `Text`)统一扩展属性。例如:
```ts
@Extend Text function myFontColor(color: ResourceColor) {
this.fontColor(color);
}
```
调用 `Text('Hello').myFontColor(Color.Red)` 即生效。所扩展的属性属于该组件类型的实例方法,可视为“通用属性”的封装形式(即所有该类型组件实例均可使用)。此处“通用属性”指面向该组件类型全体实例的可复用属性能力,并非指跨组件类型通用,符合框架定义。
**B:可以定义在组件外**
✓ 正确。
`@Extend` 是模块级装饰器,必须定义在组件类(如 `@Component`)外部,且通常位于独立文件或模块顶层作用域。它不依赖于任何组件实例或生命周期,其作用是对组件构造函数原型进行扩展。若定义在组件内部(如 `build()` 函数中或组件类体内),将导致语法错误或运行时异常。因此,规范要求且仅允许定义在组件外部。
**C:支持通用事件**
✓ 正确。
`@Extend` 可扩展事件处理能力。例如为 `Button` 统一添加防抖点击事件:
```ts
@Extend Button function debounceClick(callback: () => void, delay: number = 300) {
let timer: NodeJS.Timeout | undefined;
this.onClick(() => {
clearTimeout(timer);
timer = setTimeout(callback, delay);
});
}
```
该扩展方法可被任意 `Button` 实例调用,实现事件行为的通用化封装。“通用事件”在此指针对某类组件统一增强的事件响应逻辑,而非原生事件列表之外新增事件类型,符合框架语义。
**D:支持使用参数**
✓ 正确。
`@Extend` 定义的函数可声明任意数量与类型的参数(包括必选、可选、默认参数),并在调用时传入。上述 A、C 选项中的示例均已体现参数传递。参数用于定制扩展行为(如颜色值、延时毫秒数等),是其实用性的关键支撑。
**结论:**
ABCD 均符合 `@Extend` 的官方规范与实际能力,答案正确。
补充说明:
- `@Extend` 的作用对象是组件类型(构造函数),而非具体实例;
- 扩展的方法会挂载到对应组件原型链上,因此具有继承性与复用性;
- 不同组件类型需分别定义 `@Extend`(如 `@Extend Text` 与 `@Extend Button` 相互隔离),不存在跨类型通用,但同一类型下所有实例均共享扩展能力——这正是“通用”的准确含义。
相关知识点:
@Extend说法正确选项全选
题目纠错
2025年HarmonyOS应用开发者基础认证题库
