Javascript代理模式的问题
Hi希望创建一个函数,该函数接受一个参数(函数)并代理该函数: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); }; } 不幸的是代理不起作用。
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规范的一部分。该页面还解释了为什么我的方法不起作用,因为(在实现解释器中)属性是只读的。