2009-03-12 4 views
43

Возможно ли найти адрес памяти переменной JavaScript? Код JavaScript является частью (встроенной) в обычное приложение, где JavaScript используется как интерфейс C++ и не запускается в браузере. Используемая реализация JavaScript - SpiderMonkey.Как получить адрес памяти переменной JavaScript?

+0

Под «встроенным в обычное приложение», вы имеете в виду, что у вас есть веб-страница со встроенным Javascript? – Juliet

+0

Нет, он не запускается в браузере, нет веб-страниц. Механизм JavaScript является частью обычного рабочего стола. – vivekian2

ответ

14

Если бы это было возможно, это было бы очень зависимо от механизма javascript. Более современный механизм javascript скомпилирует свой код с использованием компилятора только во времени и возится со своими внутренними переменными, либо будет плохим для производительности, либо плохим для стабильности.

Если двигатель разрешает это, почему бы не сделать интерфейс вызова функций некоему собственному коду для обмена значениями переменной?

+1

Да, я согласен, думаю, нужно иметь некоторый код на C++, который может взаимодействовать с JavaScript. – vivekian2

8

Это более-менее невозможно. Стратегия оценки Javascript всегда должна использовать вызов по значению, но в случае объектов (включая массивы) переданное значение является ссылкой на объект, который не копируется и не клонируется. Если вы переназначаете сам объект в функции, оригинал не будет изменен, но если вы переназначите одно из свойств объекта, это повлияет на исходный объект.

Сказали, чего вы пытаетесь достичь? Если это просто передача сложных данных между C++ и Javascript, вы можете использовать библиотеку JSON для общения. Отправьте объект JSON на C++ для обработки и получите объект JSON для замены старого.

+0

Замечание о переназначении самого объекта или свойства. Можете ли вы каким-то образом изменить объект, на который указывают исходные точки? – Qwerty

+1

Вы имеете в виду изменить ссылку объекта в другой области? Нет. В таких ситуациях лучше использовать инкапсуляцию JS или объектно-ориентированные средства, либо путем помещения тела функции и ссылки, которую вы хотите изменить в той же области, или путем создания ссылки и членов функции того же объекта , – user2310967

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

  • Нет связанных вопросов^_^