代码之家  ›  专栏  ›  技术社区  ›  krosenvold

javascript中的动态代理?

  •  6
  • krosenvold  · 技术社区  · 16 年前

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

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

    作为一名java程序员,我认为这是一个动态代理。每次我写这样的代码,我都会想 某人 我一定做了一个非常聪明的库,它能执行常见的代理操作,比我匆忙中能做的至少好10%。我期待一些东西,比如正确拦截任何给定对象的所有方法,这可能并非完全微不足道。然后是不同类型的建议。所以,虽然我不期待像scriptaculous这样大的东西,但它肯定超过6行代码。

    5 回复  |  直到 16 年前
        1
  •  4
  •   Serxipc    16 年前

    尝试 jQuery AOP plugin

    看着 source 似乎只使用jQuery作为名称空间,所以你可以试试这个

        3
  •  0
  •   REA_ANDREW    16 年前

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

    http://jsdesignpatterns.com/

        4
  •  0
  •   Georg Schölly Crazy Developer    16 年前

    我认为你无法拦截所有功能。

    你能做的最好的事情就是迭代对象的所有元素并查找任何函数:

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