2010-09-21 58 views
1

很简单(对于90%的aop特性而言)在没有任何支持作为语言本身的情况下完成它,就像大多数动态语言(如python和ruby)一样。但是,Dojo直接支持它在1.3.2。最新版本发生了什么?他们删除了它吗?Javascript AOP支持

是否有另一个JavaScript aop库应该得到更多关注?

回答

2

dojox.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/)链接仍然是当前,这样你就可以使用它作为一般参考。我计划将它迁移到官方参考文档。

+0

未能进行˚F ind在最新的文档中。它使它看起来像被遗弃了。 – 2010-09-21 01:51:23

+0

当然不是。我会调查文档问题。现在,我将API文档链接添加到我的答案中。 – 2010-09-21 06:59:41

+0

太好了。如果它是作为一个单独的图书馆提供给dojo之外的话,那么它会更大,但是在Nodejs之外的JavaScript项目通常不会将模块化作为一个大问题。 – 2010-09-21 16:40:15

0

那么,你可以尝试这些装饰品https://www.npmjs.com/package/ng-aspect带给TypeScript(ES2015/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 
0

当然,任何语言都会支持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/kaop https://github.com/k1r0s/kaop-ts(阿尔法)(如果你爱ES7装饰)

我也写了一篇文章,解释这个技巧

https://medium.com/@k1r0s/aspect-oriented-programming-in-javascript-es5-typescript-d751dda576d0#.3d04ziock