lomeo: (лямбда)
Dmitry Antonyuk ([personal profile] lomeo) wrote2009-04-10 03:59 pm

Proxy pattern in Javascript

А нет в javascript чего то вроде питоновского __getattr__ или смолтолкового doesNotUnderstand? Нужно, например, прокси соорудить, а механизма получения методов проксируемой сущности нет. Так что их руками передавать?

UPD: оборачиваемый объект удалённый. То, что у него есть какой-то метод становится известно только в момент вызова.
ext_659502: (Default)

[identity profile] some41.livejournal.com 2009-04-10 12:13 pm (UTC)(link)
только расширением: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/noSuchMethod
ext_659502: (Default)

[identity profile] some41.livejournal.com 2009-04-10 12:17 pm (UTC)(link)
конкретно для прокси, что мешает пройтись по всем методам проксируемого объекта?

[identity profile] lomeo.livejournal.com 2009-04-10 02:09 pm (UTC)(link)
У меня объект удалённый. Методы его известны только программисту. Скажем RPC.
ext_659502: (Default)

[identity profile] some41.livejournal.com 2009-04-10 02:13 pm (UTC)(link)
то есть, объекта в js у тебя нет, у тебя есть объект чтобы делать RPC. и ты просто хочешь вместо foo.call("bar", 1, 2, 3) писать foo.bar(1, 2, 3)?

[identity profile] lomeo.livejournal.com 2009-04-10 03:40 pm (UTC)(link)
Так точно! Я уже понял, что выражаю свои мысли невнятно :(

[identity profile] lomeo.livejournal.com 2009-04-10 02:10 pm (UTC)(link)
Прикольно, спасибо!
ext_659502: (Default)

[identity profile] some41.livejournal.com 2009-04-10 02:19 pm (UTC)(link)
да, getters, оказывается, тоже есть: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/Object

[identity profile] dmitriid.livejournal.com 2009-04-10 12:23 pm (UTC)(link)
http://stackoverflow.com/questions/235289/how-can-i-list-the-methods-of-a-javascript-object-in-vs-command-window

[identity profile] lomeo.livejournal.com 2009-04-10 02:10 pm (UTC)(link)
У меня объект удалённый. Методы его известны только программисту. Скажем RPC.

[identity profile] dmitriid.livejournal.com 2009-04-13 07:56 am (UTC)(link)
RPC на Яваскрипте? 0_о

Ну, тут я уже даже не знаю, что сказать :)

[identity profile] lomeo.livejournal.com 2009-04-13 09:53 am (UTC)(link)
Ну, да. Это внутренний проект. Просто с веб-мордой.

[identity profile] lionet.livejournal.com 2009-04-10 12:32 pm (UTC)(link)
Как это нет? for(_ in _) плюс .hasOwnProperty?

[identity profile] lomeo.livejournal.com 2009-04-10 02:11 pm (UTC)(link)
Уже третий! Я javascript не настолько не знаю, у счастью :-)
У меня объект удалённый. Методы его известны только программисту. Скажем RPC.

[identity profile] vidmich.livejournal.com 2009-04-10 02:19 pm (UTC)(link)
ну, теоритически можно сделать в этом прокси-объекте функцию типа checkMethod которая бы пинала удаленный объект проверяя есть ли там такой метод и потом создавала соответствующую функцию в прокси-объекте... ну или зарестриктить удаленные объекты чтобы у них была функция которая возвращает список всех их функций и пинать ее при создании прокси-объекта и создавать свои функции для них

[identity profile] zelych.livejournal.com 2009-04-10 03:14 pm (UTC)(link)
кажется, в следующей версии хотят сделать такое

[identity profile] virkony.livejournal.com 2010-03-12 04:53 pm (UTC)(link)
Если нужна портируемость, а в JS какой-то версии нету того что надо, то можно сделать явный метод для базового объекта, который будет искать в аттрибутах объекта и если не найдет, то будет возвращать результат defaultAttribute или что-то в этом роде.
Т.е. использование таких объектов, которые могут быть проксированы:
myBall.g("doThrowTo")(someBasket);
x *= myBall.g("getColor").Alpha;

в первом случае defaultAttribute должен возвращать функцию, соответственно.

[identity profile] lomeo.livejournal.com 2010-03-15 12:36 pm (UTC)(link)
Судя по тому, что коммент написан в пятницу, некрофилия у вас от усталости :-)