外观JS
Typescript的AOP框架,与浏览器和节点兼容.
摘要
受到 视角J java框架, 外观JS 杠杆 ES 装饰者 带来 面向Javascript和Typescript.

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}我们得去见见见
解开 叠叠。 。 。 .
为什么?
ECMAScript 装饰器 很棒: 它们允许开发者 隐藏锅炉板代码 简单 @ 签名,保持代码干净,容易读取,容易写作。 广泛用于流行项目,例如: 角质, (中文(简体) ), (原始内容存档于2019-09-21) (英语). Nest.js 或者说 类型ORM,装饰者有一个主要的缺点:他们带着自己的内置行为来,使得工具之间的互操作性变得困难,并且防止它们被重新用于其他用途.
外观JS 采取不同的做法,提出两个重要概念: 说明 财务报告和审定财务报表 方面。 。 。 .
- 一个 注释 本质上是标记目标(类, (中文(简体) ), 属性, (中文(简体) ), 方法 或者说 参数作为进一步增强的候选项目.
- 方面 可以选择性地启用,将新行为引入注释元素.
-
无问题
const A = function( target: Function) { // behaviorA } const B = function( target: Function) { // behaviorB } @A() @B() class MyClass {} -
四. 与各方面有关的问题
const af = new AnnotationFactory('my.org') const A = af.create('A'); const B = af.create('B'); @A() @B() class MyClass {} @Aspect() class AB_Aspect { // behavior A // behavior B } getWeaver().enable(new AB_Aspect())
开始 :
-
安装软件包
npm i @aspectjs/core @aspectjs/common -
创建注释 :
// toasted.annotation.ts import { AnnotationFactory, AnnotationKind } from '@aspectjs/common'; const ANNOTATION_FACTORY = new AnnotationFactory('demo'); const Toasted = ANNOTATION_FACTORY.create( AnnotationKind.METHOD, 'Toasted', function Toasted() {}, ); -
在类、属性、方法或参数上使用注释:
// main.ts class Main { @Toasted() run() { console.log('run'); } } -
宣布注释引发的一个方面:
// toasted.aspect.ts import { Around, AroundContext, Aspect, JoinPoint, on } from '@aspectjs/core'; @Aspect() class ToastedAspect { @Around(on.methods.withAnnotations(Toasted)) toast(ctxt: AroundContext, jp: JoinPoint, jpArgs: unknown[]) { const result = jp(...jpArgs); const text = `${ctxt.target.label} completed successfully`; showToast(text); return result; } } -
启用侧面
// aop.ts import { getWeaver } from '@aspectjs/core'; getWeaver().enable(new ToastedAspect());
页:1
关于更高级的用法,请读取文件: https://aspectjs.gitlab.io/ 互联网档案馆的存檔,存档日期2013-12-02。 。 。 .
麻省理工学院
