greg zakharov пишет:Какбэ... для примера. .....
Шагаем далее. ....
Все что здесь Вами указано- это лишь констатация факта, что функции в JS являются объектами первого рода, а также то, что в глобальном пространстве объявляемые переменные автоматически связываются с хост-объектом; тот факт, что свойства без аттрибута DontEnum можно перебрать в for-in цикле, абсолютно никакого отношения к рефлексии не имеют, банальны, неинересны и неизвестны разве что новичкам
greg zakharov пишет:На протяжение всей колонки Вы сами себе неоднократно противоречили, так и не сумев сформулировать четко и внятно критерии и того, что же Вам все-таки нужно
Если постоянно не осуществлять изборочные цитирование фраз из контекста, то задача изначально одна и та же, и критерии четкие - рефлексия, чтение/модификация глобального кода и обработка ошибок времени исполнения в WSH/JScript, да так шоб прям:
* Иметь возможность посмотреть полноценный стек вызовов для текущей функции, да так чтобы как в отладчике в браузере - весь набор вышележащих функций, в том числе и анонимных, с номерами строчек и исходным кодом
* Иметь возможность посмотреть список *переменных* в текущем контексте (НЕТ, свойста объектов без аттрибута DontEnum не интересуют вообще)
* В случае WSF-файла иметь возможность определить текущую активную работу/JOB, посмотреть ее исходный код или код любой другой работы, перейти на исполнение другой работы
* Иметь возможность сделать аналог из браузерного JS конструкции window.onerror = function() { return true } (НЕТ, глобальный try/catch это совершенно другое, в VBScript есть аналогчная вещь, но в JScript нету)
* Иметь возможность сделать аналог из браузерного JS конструкции document.scripts["myscript"].text = superfunction(document.scripts["myscript"].text), да так чтобы состояние всех объектов программы сохранилось, но изменился исходный код следующего исполняемого участка
Считаете что нет четкой формулировки? Их можно сделать много эквивалентных, но пусть будет такая - заставить заработать такую вот библиотеку http://summerofgoto.com/ для JScript/WSH; в браузерном JavaScript она прекрасно работает
Никакие ваши свойства объектов, да и функции первого рода здесь не помогут - нужно то же, что и в оригинальной задаче
greg zakharov пишет:Иными словами, определяя глобальную переменную, фактически определяется свойство глобального объекта
Ничего подобного! Мало того что это не имеет отношения к поставленной задачи, к тому же это не совсем правда и зависит от реализации JS-интерпретатора
В некоторых реализациях Gecko обращение к конструкции this.variable снимает DontDelete-флаг ассоццированной var-переменной
Что интересного в том, что JScript-интерпретатор устанавливает символическую ссылку между свойствами хост-объекта и глобальной переменной, не говоря уже о том, что var myvar и GLOBAL.myvar это совершенно две разные вещи
YMP пишет:Как именно? Допустим, получили вы указатель на объект, не поддерживающий IDispatch, в переменную (какого типа?), и каковы дальнейшие действия?
Собственно в этом и состоит вопрос всей рассматриваемой темы
Очень приближенно схема следующая- осуществляется получение указателя на объект текущего интерпретатора, который согласно спецификации WSH/Jscript является OLE-объектом, и уж если IDispatch там не поддерживается, то с помощью библиотеки вроде DynamicWrapperX или каких-то еще внешних средств, осуществить вызов требуемых методов этого Scripting engine с необходимыми аргементами, вроде http://msdn.microsoft.com/en-us/library … s.85).aspx, которые уже предоставляют настоящую информацию о рефлексии, и http://msdn.microsoft.com/en-us/library … s.85).aspx для модифкации требуемых элементов кода в реальном времени
Более того насчет интерфейса IDispath, существует такой метод http://msdn.microsoft.com/en-us/library … s.85).aspx, вероятно его возможно применить для обозначенной цели
Спасибо