2009-03-12 28 views
43

¿Es posible encontrar la dirección de memoria de una variable de JavaScript? El código JavaScript es parte de (incrustado en) una aplicación normal donde JavaScript se usa como interfaz para C++ y no se ejecuta en el navegador. La implementación de JavaScript utilizada es SpiderMonkey.¿Cómo puedo obtener la dirección de memoria de una variable de JavaScript?

+0

Por "incrustado en una aplicación normal", ¿quiere decir que tiene una página web con Javascript incrustado? – Juliet

+0

No, no se ejecuta en el navegador, no hay páginas web involucradas. El motor de JavaScript es parte de una aplicación de escritorio normal. – vivekian2

Respuesta

14

Si fuera posible, sería muy dependiente del motor de JavaScript. El motor javascript más moderno compila su código usando un compilador justo a tiempo y jugar con sus variables internas sería malo para el rendimiento o malo para la estabilidad.

Si el motor lo permite, ¿por qué no hacer una interfaz de llamada a función a algún código nativo para intercambiar los valores de la variable?

+1

Sí, estoy de acuerdo, creo que es necesario tener algún código en C++ que pueda interactuar con JavaScript. – vivekian2

8

Es más o menos imposible: la estrategia de evaluación de Javascript es usar siempre la llamada por valor, pero en el caso de los objetos (incluidas las matrices) el valor pasado es una referencia al objeto, que no se copia ni clona. Si reasigna el Objeto mismo en la función, el original no se cambiará, pero si reasigna una de las propiedades del Objeto, eso afectará al Objeto original.

Dicho esto, ¿qué intentas lograr? Si solo está pasando datos complejos entre C++ y Javascript, podría usar una biblioteca JSON para comunicarse. Envíe un objeto JSON a C++ para su procesamiento y obtenga un objeto JSON para reemplazar el antiguo.

+0

Gran nota sobre la reasignación de Object o una propiedad. ¿Puedes de alguna manera cambiar el objeto al que apuntan los puntos originales? – Qwerty

+1

¿Quiere decir, cambiar la referencia de un objeto dentro de un alcance diferente? No. En tales situaciones, es mejor utilizar la encapsulación de JS o las instalaciones orientadas a objetos, ya sea colocando el cuerpo de la función y la referencia que desea cambiar en el mismo ámbito, o haciendo que la referencia y los miembros de la función del mismo objeto . – user2310967

Cuestiones relacionadas