2015-07-09 2 views
1

Я в настоящее время работаю над большим проектом Javascript с большим количеством библиотек. Я хотел бы, чтобы часть этого проекта выполнялась в отдельной ветке. В JavaScript уже есть что-то, что делает это: веб-работники.Автоматически вызывать функцию при доступе к объекту в Javascript

Хотя веб-работники не могут получить доступ к объекту window, и многие библиотеки используют его. Есть ли способ автоматически изменить вызов объекта окна (в библиотеках, используемых для веб-работников), в сообщение, отправленное в родительский поток?

Затем родительский поток выполнил действие, которое работник захочет и отправит результат работнику.

Возможно ли это? И да, знаете ли вы, как вы это понимаете?

Спасибо!

+0

Попробуйте прочитать о [Worker.postMessage()] (https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage). –

+0

Я хорошо знаю эту функцию, и я уверен, что буду использовать ее для выполнения того, что я хочу делать. Хотя, я ищу, как вызывать эту функцию автоматически каждый раз, когда я хочу получить доступ к объекту 'window'. – clems4ever

ответ

1

Боюсь, что нет реального решения. То, что вы, вероятно, хотите, это особый объект в вашем рабочем месте, который при каждом доступе к свойствам передает выполнение потоку диспетчеризации, который обрабатывает запрос, используя исходный объект окна.

Для этого вам понадобится какой-то метод доступа, доступный всем, который будет запускаться всякий раз, когда ссылается свойство. К сожалению, нет такой вещи, в Javascript, посмотреть подробное обсуждение (особенно ответ TJ Crowder в): (! В настоящее время поддерживается в FF и IE12 (Пойди разберись)) Is it possible to implement dynamic getters/setters in JavaScript?

ECMAScript 6 вводит новый механизм под названием Proxy, который позволит вам сделать эти динамические поиски свойств технически - но я чувствую, что есть более фундаментальная проблема с вашей идеей: вы пытаетесь превратить локальный вызов в сообщение через границы однопоточных сред.

Передача сообщений от рабочих потоков и их рабочих потоков должна быть асинхронной (поскольку поток «javascript» не может быть прерван до тех пор, пока он не даст), что означало бы, что даже если вам удастся создать такой прокси-сервер, эффективно превращать синхронную операцию (т. е. доступ к свойствам) в асинхронную, что является довольно большой проблемой, особенно если вы ищете замену замены для использования некоторых существующих библиотек.

+0

Хорошо спасибо за ваш ответ и ссылки! Ну, я думаю, мне придется выяснить еще один путь! – clems4ever

Смежные вопросы