很簡單(對於90%的aop特性而言)在沒有任何支持作爲語言本身的情況下完成它,就像大多數動態語言(如python和ruby)一樣。但是,Dojo直接支持它在1.3.2。最新版本發生了什麼?他們刪除了它嗎?Javascript AOP支持
是否有另一個JavaScript aop庫應該得到更多關注?
很簡單(對於90%的aop特性而言)在沒有任何支持作爲語言本身的情況下完成它,就像大多數動態語言(如python和ruby)一樣。但是,Dojo直接支持它在1.3.2。最新版本發生了什麼?他們刪除了它嗎?Javascript AOP支持
是否有另一個JavaScript aop庫應該得到更多關注?
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/)鏈接仍然是當前,這樣你就可以使用它作爲一般參考。我計劃將它遷移到官方參考文檔。
那麼,你可以嘗試這些裝飾品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
當然,任何語言都會支持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裝飾)
我也寫了一篇文章,解釋這個技巧
未能進行˚F ind在最新的文檔中。它使它看起來像被遺棄了。 – 2010-09-21 01:51:23
當然不是。我會調查文檔問題。現在,我將API文檔鏈接添加到我的答案中。 – 2010-09-21 06:59:41
太好了。如果它是作爲一個單獨的圖書館提供給dojo之外的話,那麼它會更大,但是在Nodejs之外的JavaScript項目通常不會將模塊化作爲一個大問題。 – 2010-09-21 16:40:15