javascript中的动态代理?

时间:2009-02-20 07:12:16

标签: javascript

我可以通过做这样的事情代理javascript中的单个函数(只是从内存中记下来,所以请耐心等待)

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

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

那么这些图书馆在哪里?

4 个答案:

答案 0 :(得分:4)

尝试jQuery AOP plugin

查看source似乎只使用jQuery作为命名空间,因此即使不想使用jQuery,也可以尝试使用插件

答案 1 :(得分:1)

Dojo Toolkit对AOP结构有很多支持,如下所示:
Eugene Lazutkin's Blog Post on Aspect Oriented Programming with Dojo

答案 2 :(得分:0)

你能够做到这一点的事实我认为意味着有一个库以纯JavaScript的形式实现它,即上面的例子。如您所知,设计模式可以应用于JavaScript,因此我认为我将向您提供的建议如下是Google和Yahoo GUI开发人员:

http://jsdesignpatterns.com/

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

干杯,

安德鲁

答案 3 :(得分:0)

我认为你不能拦截所有功能。

您可以做的最好的事情是遍历对象的所有元素并查找任何函数:

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

麻烦的是,如果你以后添加一个函数,它就不会通过代理路由。