2009-02-20 53 views
5

我可以代理在做这样的事情的javascript功能单一(只是从内存记下来,多多包涵)在JavaScript中的动态代理?

function addAroundAdvice(target){ 
    var targetFunction = target.aFunction; 
    target.aFunction = new function(){ 
      invokePreCall(); 
      targetFunction.apply(target, arguments); 
      invokePostCall(); 
    } 
} 

作为一个Java程序员我认为这是一个动态代理。每次我写这样的代码时,我认为有人必须做出一个非常聪明的库,它执行的常见代理操作至少比我能够匆忙做的要好10%。我期待一些东西,比如正确拦截任何给定对象的所有方法,这可能不是完全无关紧要的。然后有不同类型的建议。所以虽然我不期待scriptaculous的大小,但它肯定超过6行代码。

那么这些库在哪里?

+0

这将有助于了解你想要达到的目标。 – cletus 2009-02-20 07:16:16

+0

我自己没有见过他们,但我有NIH倾向... – 2009-02-20 07:28:40

+0

我还是没有明白道理:你想让图书馆为你节省6行代码?图书馆在Javascript中的成本很高(而在C#/ Java中,你似乎拥有它们只是因为你可以)。我不能说我曾经需要在Javascript中编写建议。 – cletus 2009-02-20 07:35:15

回答

4

尝试jQuery AOP plugin

看着似乎只有用了jQuery作为一个命名空间中的source,所以你可以试试这个插件即使不想使用jQuery。

0

事实上,你已经能够做到这一点,我认为这意味着有一个库以纯JavaScript的形式实现它,即上面的例子。设计模式可以应用到JavaScript作为你知道的,所以我想我会提供给你的建议是由谷歌和雅虎的GUI开发以下内容:

http://jsdesignpatterns.com/

第14章:代理模式。给你的参考解决方案。你可能仍然喜欢你的方法,或者你可以从他们的方法中找到提示。

干杯,

安德鲁

0

我不认为你可以截取所有功能。

你能做的最好的是遍历一个对象的所有元素,并寻找任何功能:

for elem in someObject { 
    if typeof(elem) == "function" { 
     // replace the function 
    } 
} 

麻烦的是,如果你在以后添加的功能它不是通过代理路由。