Javascript代理模式的问题

Javascript代理模式的问题,javascript,Javascript,Hi希望创建一个函数,该函数接受一个参数(函数)并代理该函数: function proxyFunc(func) { console.log("Proxying ", func.name); var proxied = func; func = function() { console.log("Calling proxied ", func.name); return proxied.apply(this, arguments); }; } 不幸的是代理不起作用。

Hi希望创建一个函数,该函数接受一个参数(函数)并代理该函数:

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() { ... }

你在找这个吗

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");

你在找这个吗

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");

您需要返回
func
,否则您的
proxyFunc
无效。我想拦截对方法的调用您需要返回
func
,否则您的
proxyFunc
无效。我想拦截对方法的调用这可以用作
Object.func1=proxyFunc(Object.func1)
但我想跳过assignment@nrabinowitz:请注意,您可以使用
var f=function foo(x){…}
来设置
name
,而不是手动设置。@Erik:您不能。Javascript不会传递这样的参数。@Eric-huh,从来都不知道。但请注意,它不是ECMAScript规范的一部分。该页还解释了我的方法不起作用的原因,因为属性(在实现解释器中)是只读的。这可以用作
Object.func1=proxyFunc(Object.func1)
但我想跳过assignment@nrabinowitz:请注意,您可以使用
var f=function foo(x){…}
来设置
name
,而不是手动设置。@Erik:您不能。Javascript不会传递这样的参数。@Eric-huh,从来都不知道。但是请注意,它不是ECMAScript规范的一部分。该页面还解释了为什么我的方法不起作用,因为(在实现解释器中)属性是只读的。