Как реализовать ненавязчивый метод переадресации? - PullRequest
0 голосов
/ 29 января 2011
var o = new SomethingComplex;

var o.foo = new SomeThing; // we have o.foo.doSomething

setUpForwarding(o, o.foo);

o.doSomething(); // calls o.doSomething if exist, else o.foo.doSomething

Как можно настроить ненавязчивый метод пересылки? Использование методов ES5 прекрасно. Я могу представить, что это невозможно в IE6

Я не ищу такой метод, как o.call("doSomething"); Я хочу, чтобы он был совершенно незаметным.

Также редактирование .__proto__, так что вы можете добавить o.foo в цепочку прототипов, обманывает и не разрешено. Перезапись o с o.foo в его естественной цепочке прототипов разрешена, но o не ограничена по сложности.

Остались ли какие-либо жизнеспособные варианты?

Я просто помню существование node-proxy , которое позволяет расширять node.js для реализации прокси (реализовано в C ++). Это обеспечивает полную функциональность и, вероятно, может быть перенесено на другой SS JS.

1 Ответ

0 голосов
/ 29 января 2011

В JavaScript нет обработчиков «перехватить все», хотя он рассматривается в будущей версии.

Эту конкретную проблему можно решить, если setUpForwarding выполнить итерацию по всем элементам функции foo, а затем создать функцию пересылки в o с тем же именем. Это будет работать только для функций.

...