Javascript dojo/aspect';s before()/after()一次()?

Javascript dojo/aspect';s before()/after()一次()?,javascript,dojo,aspect,Javascript,Dojo,Aspect,dojo/on有once(),这非常有用。如何在dojo/aspect的before()/after()中实现这种行为?我真不敢相信有人实现了one()到dojo/on,但没有实现dojo/aspect。我看不出有什么区别。保存before/after的返回并调用remove是否有那么困难?下面是一个简单的实现: aspect.onceAfter: function(target, methodName, advice, receiveArguments){ var handle = asp

dojo/on有once(),这非常有用。如何在dojo/aspect的before()/after()中实现这种行为?我真不敢相信有人实现了one()到dojo/on,但没有实现dojo/aspect。我看不出有什么区别。

保存before/after的返回并调用
remove
是否有那么困难?下面是一个简单的实现:

aspect.onceAfter: function(target, methodName, advice, receiveArguments){
  var handle = aspect.after(target, methodName, function(){
    handle.remove();
    advice.apply(null, arguments);
  }, receiveArguments);
}

这并不难,但我想知道为什么API中会出现这样的不一致。在aspect模块中实现类似的功能需要几分钟的时间。现在,我必须将我的应用程序中的100个引用从dojo/aspect更改为my/new/aspect,其中包括此功能。我无法解释编写dojo API的人的动机,但我知道我从未需要使用after/before的
once
函数,老实说,我很想知道您的用例。另外,感谢您发现了typo=),我和我都没有在许多应用程序中使用Dojo编写过大约5万行代码。这是我第一次需要它,因为它看起来很方便。当模块是独立的/松散耦合的-once()时,这是一件非常自动的事情,您完成了,剩下的是GC:)我想这是因为它不是一个用于面向方面编程的概念。AOP是关于横切关注点和在程序中的多个点“注入”代码(比如日志记录)。它的目的不是一次执行一个代码块,然后再也不会执行。我从未见过任何面向方面的代码应该执行一次。在这种心态下,你不会想到创建一个“一次性”的特性。你可以在bugtrac上提交特性请求。它很可能会被接受。