繁体   English   中英

javascript中的动态代理?

[英]Dynamic proxies in javascript?

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

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

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

那么这些图书馆在哪里?

试试jQuery AOP插件

看看源代码似乎只使用jQuery作为命名空间,所以即使不想使用jQuery,你也可以尝试这个插件

Dojo Toolkit对AOP结构有很多支持,如下所示:
Eugene Lazutkin关于使用Dojo进行面向方面编程的博客文章

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

http://jsdesignpatterns.com/

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

干杯,

安德鲁

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM