首页 > 解决方案 > 如何将 decorator() 的语法更改为 @decorator

问题描述

我知道在 TypeScript 中,您可以为装饰器模式使用特定语法:@decorator()。我想知道这种语法是如何在幕后工作的。

@ 符号如何变成装饰器函数?这也可以在 vanilla JavaScript 中完成吗?如果是这样:如何?

我知道它可能会:

下面是一个例子作为澄清

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' );

标签: javascriptdecorator

解决方案


推荐阅读