昨日:Titanium MobileでTitaniumのオブジェクトにTitaniumのオブジェクト以外のオブジェクトを参照渡ししても参照渡しにならない! - ITは遊び
試しにやってみたら出来ました。
// 普通にマイオブジェクトを作る var myObject = {}; myObject.val = "before_val"; // Titaniumのオブジェクトを作り、マイオブジェクトを持たせる var tiObject = Titanium.UI.createButton(); tiObject.myObject = myObject; // 普通のJavascriptのオブジェクト、マイオブジェクトを持たせる var stnObject = {}; stnObject.myObject = myObject; // マイオブジェクトを更新する myObject.val = "after_val"; // 昨日の復習 // Titaniumのオブジェクトの方は、参照で渡せていない! Ti.API.info("TitaniumObject:" + tiObject.myObject.val); // [INFO] TitaniumObject:before_val // 普通のJavascriptのオブジェクトの方は、当然参照で渡せているので、値が変わる Ti.API.info("JavaScriptObject:" + stnObject.myObject.val); // [INFO] JavaScriptObject:after_val // Titaniumオブジェクトには関数だけ渡してみる (function(){ var sansho = myObject; tiObject.getMyObject = function(){ return sansho; }; })(); // 元のオブジェクトを変更する myObject.val = "change_val_sansho"; // Titaniumオブジェクトでは、この方法なら変更できている。つまり参照渡し成功。 Ti.API.info("TitaniumObject:" + tiObject.getMyObject().val); // [INFO] TitaniumObject:change_val_sansho // 普通のJavascriptオブジェクトでは、当然できている Ti.API.info("JavaScriptObject:" + stnObject.myObject.val); // [INFO] JavaScriptObject:change_val_sansho tiObject.getMyObject().val = "change_val_sansho"; // 逆をやってみる。Titaniumオブジェクト tiObject.getMyObject().val = "change_val_tiObject"; // Titaniumオブジェクトからの変更はできる Ti.API.info("TitaniumObject:" + tiObject.getMyObject().val); // TitaniumObject:change_val_tiObject // 普通のjavascriptオブジェクトでも、当然参照している Ti.API.info("JavaScriptObject:" + stnObject.myObject.val); // JavaScriptObject:change_val_tiObject
できるっちゃできるけど、ガベージコレクションが拾ってくれなくてメモリリークが発生しそうだよね…。