2009-03-12 8 views
43

Kann die Speicheradresse einer JavaScript-Variablen gefunden werden? Der JavaScript-Code ist Teil einer normalen Anwendung, in der JavaScript als Frontend für C++ verwendet wird und nicht im Browser ausgeführt wird. Die verwendete JavaScript-Implementierung ist SpiderMonkey.Wie kann ich die Speicheradresse einer JavaScript-Variablen erhalten?

+0

Mit "in eine normale Anwendung eingebettet" meinen Sie, dass Sie eine Webseite mit eingebettetem Javascript haben? – Juliet

+0

Nein, es läuft nicht im Browser, es sind keine Webseiten beteiligt. Die JavaScript-Engine ist Teil einer normalen Desktop-App. – vivekian2

Antwort

14

Wenn es überhaupt möglich wäre, wäre es sehr abhängig von der Javascript-Engine. Die modernere Javascript-Engine kompiliert ihren Code mit einem Just-in-Time-Compiler und das Durcheinander mit ihren internen Variablen wäre entweder schlecht für die Performance oder schlecht für die Stabilität.

Wenn die Engine es erlaubt, warum nicht eine Funktionsaufrufschnittstelle zu irgendeinem gebürtigen Code herstellen, um die Werte der Variablen auszutauschen?

+1

Ja, ich stimme zu, denke, dass Sie etwas Code in C++ haben müssen, der mit JavaScript interagieren kann. – vivekian2

8

Es ist mehr oder weniger unmöglich - Auswertungsstrategie von Javascript ist immer Call by value, aber im Falle von Objekten (einschließlich Arrays) ist der übergebene Wert eine Referenz auf das Objekt, das nicht kopiert oder geklont wird. Wenn Sie das Objekt selbst in der Funktion neu zuweisen, wird das Original nicht geändert. Wenn Sie jedoch eine der Eigenschaften des Objekts neu zuweisen, wirkt sich dies auf das ursprüngliche Objekt aus.

Das gesagt, was versuchst du zu erreichen? Wenn Sie nur komplexe Daten zwischen C++ und Javascript übergeben, können Sie eine JSON-Bibliothek für die Kommunikation verwenden. Senden Sie ein JSON-Objekt zur Verarbeitung an C++, und rufen Sie ein JSON-Objekt ab, das das alte ersetzen soll.

+0

Toller Hinweis zum Neuzuweisen des Objekts selbst oder einer Eigenschaft. Kannst du das Objekt, auf das das Original verweist, irgendwie ändern? – Qwerty

+1

Meinst du, ändern Sie die Referenz eines Objekts in einem anderen Bereich? Nein. In solchen Situationen ist es am besten, die Kapselung oder die objektorientierten Funktionen von JS zu verwenden, indem Sie entweder den Funktionskörper und die Referenz, die Sie ändern möchten, in den gleichen Bereich einfügen oder die Referenz- und Funktionsmember desselben Objekts erstellen . – user2310967