我可以通过做这样的事情代理javascript中的单个函数(只是从内存中记下来,所以请耐心等待)
function addAroundAdvice(target){
var targetFunction = target.aFunction;
target.aFunction = new function(){
invokePreCall();
targetFunction.apply(target, arguments);
invokePostCall();
}
}
作为一名java程序员,我认为这是一个动态代理。每当我编写这样的代码时,我认为某人必须创建一个非常聪明的库,它可以执行常见的代理操作,比我能赶时间做的至少好10%。我期待一些东西,比如正确拦截任何给定对象的所有方法,这可能不是完全无关紧要的。然后有不同类型的建议。因此,虽然我并不期待像scriptaculous那么大的东西,但它肯定超过6行代码。
那么这些图书馆在哪里?
答案 0 :(得分:4)
查看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开发人员:
第14章:代理模式。参考那里的解决方案。您可能仍然更喜欢自己的方法,或者您可以从他们的方法中找到提示。
干杯,
安德鲁
答案 3 :(得分:0)
我认为你不能拦截所有功能。
您可以做的最好的事情是遍历对象的所有元素并查找任何函数:
for elem in someObject {
if typeof(elem) == "function" {
// replace the function
}
}
麻烦的是,如果你以后添加一个函数,它就不会通过代理路由。