JavaScript装饰器是Stage 3提案,支持修饰类、类方法、访问器及字段,不支持普通函数等;分为类装饰器(1参数)、方法装饰器(3参数)、参数装饰器(3参数),需TS或Babel配置启用。

JavaScript 中的装饰器(Decorators)目前仍是 Stage 3 提案,尚未正式纳入 ECMAScript 标准,但已被 TypeScript 和 Babel(配合插件)广泛支持。它提供了一种声明式方式来**增强类、类成员(方法、访问器、属性)的行为**,但不能用于普通函数、变量或模块顶层声明。
装饰器语法 @decorator 只能用在以下位置:
@observer)decorators-legacy 或使用提案中的新字段装饰器语法(Babel 7.23+ 支持)❌ 不支持修饰:
– 普通函数声明/表达式
– const/let/var 变量
– 模块导出语句
– if/for 等语句块
– 构造函数(constructor 本身不能加 @,但可装饰其参数——见下文)
装饰器本质是函数,根据作用目标不同,接收参数数量和含义不同:
target)@logClass<br>class User { ... }target(原型或构造函数)、propertyKey(方法名)、descriptor(属性描述符,可改写 value 或 set/get)@debounce(300)<br>handleClick() { ... }target、propertyKey、parameterIndex;仅用于收集元数据(如依赖注入),不能修改参数本身
这是非常典型的场景,避免高频触发(如搜索输入、窗口 resize):
立即学习“Java免费学习笔记(深入)”;
function debounce(wait) {
return function(target, propertyKey, descriptor) {
const originalMethod = descriptor.value;
let timeoutId;
descriptor.value = function(...args) {
clearTimeout(timeoutId);
timeoutId = setTimeout(() => originalMethod.apply(this, args), wait);
};
};
}
class SearchBox {
@debounce(400)
onInput(value) {
console.log('发起搜索:', value);
}
}调用 searchBox.onInput('js') 多次,只会最终执行一次(400ms 后)。
想在项目中使用装饰器,需明确环境支持:
tsconfig.json 中启用 "experimentalDecorators": true 和 "emitDecoratorMetadata": true(后者用于反射)@babel/plugin-proposal-decorators,推荐配置 {"version": "2023-11"}(匹配最新提案)以上就是javascript中的装饰器如何应用_可以修饰哪些声明的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号