Я пытаюсь создать функцию, которая создает «прокси» вокруг метода объекта. Этот «прокси» будет использоваться для обработки веб-запросов, а затем вызова целевого метода. Функция прокси выглядит примерно так:Область переменной Javascript при динамически ссылающихся функциях
var proxy = function(c) {
var proxy = {};
for(var member in c) {
var args = c[member].toString().match (/function\s*\w*\s*\((.*?)\)/)[1].split (/\s*,\s*/);
proxy[member] = function(params) {
var methodArgs = args.map(function(argName) {
return params[argName];
});
return c[member].apply(c, methodArgs);
}
}
return proxy;
};
Так что, если у меня есть этот оригинальный контроллер,
var c = {
sum: function(x, y) {
return x + y;
},
multiply: function(x, y) {
return x * y;
}
};
вызова прокси (с) на это возвращает прокси-объект с суммой() и умножим() функции. Однако из-за области переменной member
в функции proxy() она всегда вызывает последнюю ссылочную функцию в c - в этом случае multiply().
var cProxy = proxy(c);
//this should call c.sum, but instead calls c.multiply
cProxy.sum({
x: 3,
y: 8
});
Как я могу ссылаться на правильную функцию в функции proxy(), чтобы вызвать правильный метод?
почему вы не просто делать 'прокси [член] = с [член]'? – Markasoftware
Приведенный выше код упрощен. В реальной реализации прокси-сервер будет обрабатывать веб-запросы и обрабатывать данные запроса перед вызовом исходного метода в c, так что это было бы невозможно. Я смог заставить его работать с закрытием, как показано в ответе ниже. – subeeshb