2011-11-20 22 views
0

嗨想創建一個函數,它有一個參數(函數)和代理功能:使用JavaScript代理模式問題

function proxyFunc(func) { 
    console.log("Proxying ", func.name); 
    var proxied = func; 
    func = function() { 
    console.log("Calling proxied ", func.name); 
    return proxied.apply(this, arguments); 
    }; 
} 

不幸的是,代理不起作用。我已經想通了,代理功能的原來的功能分配的問題,但我不知道如何使它發揮作用:

func = function() { ... } 
+0

您需要返回'func',否則你的'proxyFunc'沒有效果。 – Eric

+0

我想攔截調用方法 – Erik

回答

4

你在找這個?

function proxyFunc(original) { 
    console.log("Proxying ", original.name); 
    return function() { 
     console.log("Calling proxied " + original.name); 
     return original.apply(this, arguments); 
    }; 
} 

對於你在做什麼,這將有助於:

function proxyMember(obj, member) { 
    var original = obj[member]; 
    console.log("Proxying ", member); 
    obj[member] = function() { 
     console.log("Calling proxied " + member); 
     return original.apply(this, arguments); 
    }; 
} 

proxyMember(obj, "foo"); 
+0

是的,這就是我剛剛到達的:http://jsfiddle.net/nrabinowitz/PKZUu/ – nrabinowitz

+0

這可以用作Object.func1 = proxyFunc(Object.func1)'但我想跳過作業 – Erik

+0

@nrabinowitz:請注意,您可以使用'var f = function foo(x){...}'來設置'name',而不是手動設置它。 – Eric