dojo Javascript AOP支持

bq9c1y66  于 2022-12-08  发布在  Dojo
关注(0)|答案(4)|浏览(138)

这很容易做到(对于90%的aop特性),不需要任何语言本身的支持,就像大多数动态语言,如python和ruby一样。然而,Dojo1.3.2上直接支持它。最新版本发生了什么?他们删除了它吗?
是否有另一个javascript aop库应该得到更多的关注?

mnowg1ta

mnowg1ta1#

考虑到Javascript中灵活的语法,我可以想象会有十亿个AOP库。
在谷歌上快速搜索一下,结果如下:

...和另一个Stackoverflow question

c9x0cxw0

c9x0cxw02#

lang.aspect仍然在那里,仍然被一些严肃的项目使用。没有人删除它。事实上,我希望它的一部分将成为即将到来的Dojo 2.0的重要组成部分。
你问这个问题的原因是什么?找不到一些链接,或者是别的什么?只要让我知道,我会帮助你的。

  • 更新日期:*

API文档链接:http://dojotoolkit.org/api/dojox/lang/aspect.html
指向我的关于AOP的博客文章的链接(在您的问题中列出:http://lazutkin.com/blog/2008/may/18/aop-aspect-javascript-dojo/)仍然是最新的,所以你可以把它作为一般参考,我计划把它移植到官方参考文档中。

nle07wnf

nle07wnf3#

好吧,你可以试试这些装饰器https://www.npmjs.com/package/ng-aspect,它们给TypeScript(ES 2015/2016)带来了真实的的AOP体验。

import { Before, After, Pointcut } from "./aspect";

class Foo {
  @Pointcut
  bar(){
    console.log( "calling bar", arguments );
  }
}

class Advice {
  @Before( Foo, "bar" )
  preLog() {
    console.log( "calling pre-log", arguments );
  }

  @After( Foo, "bar" )
  postLog() {
    console.log( "calling post-log" );
  }
}

(new Foo()).bar( 1, 2, 3 );

// calling pre-log 1,2,3
// calling bar 1,2,3
// calling post-log
pcrecxhr

pcrecxhr4#

当然,任何语言都支持AOP,因为AOP是一种技术,你应该自己实现它。
ES7装饰器对于AOP语法来说非常棒,但是不需要通过打字脚本来获得真实的的AOP体验。甚至ES5也可以做到:

var Class = require("kaop").Class;

var Dummy = Class({
  someMethod: [ //decoratedMethod
    "subscribe","$inject", //befores
     function($$dep1){ 
       //method body 
     }, 
     "trigger: 'action'", //afters (advice with an argument) 
  ],
  anotherMethod: function(){
    /* method without advices */
  }
})

我建议你去看看我最近的工作,它实现了顶级的AOP特性,甚至异步调用
https://github.com/k1r0s/kaophttps://github.com/k1r0s/kaop-ts(Alpha)(如果你喜欢ES7装饰器)
我还写了一篇文章来解释这个技巧
https://medium.com/@k1r0s/aspect-oriented-programming-in-javascript-es5-typescript-d751dda576d0#.3d04ziock

相关问题