javascript - 如何将 decorator() 的语法更改为 @decorator
问题描述
我知道在 TypeScript 中,您可以为装饰器模式使用特定语法:@decorator()。我想知道这种语法是如何在幕后工作的。
@ 符号如何变成装饰器函数?这也可以在 vanilla JavaScript 中完成吗?如果是这样:如何?
我知道它可能会:
- 认识@
- 识别后面的对象
- 将其转换为
new decorator( logger )
下面是一个例子作为澄清
class Logger {
message = null;
log() {
return this.message;
}
}
class Greeter extends Logger {
message = 'hello';
}
class LoggerDecorator extends Logger {
constructor( logger ) {
super();
this.logger = logger;
}
log() {
return this.logger.message += ' StackOverflow';
}
}
// example
greeter = new LoggerDecorator( new Greeter() );
console.log( greeter.log() === 'hello StackOverflow' );
greeter = new Greeter();
// @LoggerDecorator()
greeter;
// @LoggerDecorator() should do the same as new LoggerDecorator( greeter )
console.log( greeter.log() === 'hello StackOverflow' );
解决方案
推荐阅读
- javascript - Javascript:打开汉堡菜单+标题在向下滚动时隐藏并在向上滚动时显示的功能
- angular - 使单选按钮选择默认不基于值进行选择
- python - Python - Selenium Xpath 在第一个和第二个 h3 标签之间获取内容
- vb.net - 如何使用 VB.net 从网站的 Class 元素中提取文本
- android - 与以前的版本相比,适用于 android 11 的 Android 模拟器将图片和视频保存在不同的位置
- r - R - 如何为每组执行多个统计功能?
- javascript - 尝试在 Node JS 中访问导出的函数
- file - 将文件上传到 .net core 3.1 API - 只收到一半文件
- python - 如果刻度是标签而不是数字,如何扩展 matplotlib 轴?
- sorting - 是否有等效于 boost::multi_index 容器,它同时按多个索引排序?