2009-03-12 18 views
43

Bir JavaScript değişkeninin hafıza adresini bulmak mümkün mü? JavaScript kodu, JavaScript'in C++ için bir ön uç olarak kullanıldığı ve tarayıcıda çalışmadığı normal bir uygulamanın parçasıdır (içine gömülür). Kullanılan JavaScript uygulaması SpiderMonkey'dir.Bir JavaScript değişkeninin hafıza adresini nasıl alabilirim?

+0

"Normal bir uygulamaya gömülü olarak", gömülü Javascript içeren bir web sayfanız var mı? – Juliet

+0

Hayır, tarayıcıda çalışmaz, hiçbir web sayfası yoktur. JavaScript motoru normal bir masaüstü uygulamasının bir parçasıdır. – vivekian2

cevap

14

Her ne olursa olsun, javascript motoruna çok bağlı olacaktır. Daha modern javascript motoru, kodlarını derhal bir zaman derleyicisi kullanarak derler ve iç değişkenleriyle uğraşmak, performans açısından kötü ya da kararlılık açısından kötü olur.

Motor izin veriyorsa, neden değişkenin değerlerini değiştirmek için bazı yerel kodlara bir işlev çağrısı arayüzü yapmıyorsunuz?

+1

Evet, katılıyorum, C++ 'da JavaScript ile arayüz yapabilen bazı kodların olması gerektiğini düşünüyorum. – vivekian2

8

Daha fazla veya daha az imkansız - Javascript'in değerlendirme stratejisi her zaman çağrıya değer kullanmaktır, ancak Nesneler (diziler dahil) durumunda, iletilen değer, kopyalanmayan veya klonlanmamış olan Nesne bir başvurudır. Nesnenin kendisini işlevde yeniden atarsanız, orijinal değiştirilmez, ancak Nesnenin özelliklerinden birini yeniden seçerseniz, bu orijinal Nesneyi etkileyecektir.

Yani, ne yapmaya çalışıyorsunuz? C++ ve Javascript arasındaki karmaşık verileri geçiyorsa, iletişim kurmak için bir JSON kitaplığı kullanabilirsiniz. İşleme için C++'ya bir JSON nesnesi gönderin ve eskisini değiştirmek için bir JSON nesnesi alın.

+0

Nesnenin kendisini veya mülkünü yeniden tayin etme hakkında harika not. Nesneyi orijinal noktaları bir şekilde değiştirebilir misiniz? – Qwerty

+1

Farklı bir kapsamdaki bir nesnenin referansını değiştirmek mi istiyorsunuz? Hayır. Bu gibi durumlarda, JS'nin kapsülleme veya nesne yönelimli tesislerinden yararlanmak, fonksiyon gövdesini ve aynı kapsamda değiştirmek istediğiniz referansı koyarak veya aynı nesnenin referansını ve işlev üyelerini yaparak . – user2310967

İlgili konular