※追記
参照渡しにする方法は変わった方法だけどありました: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のオブジェクトを作ってみる var tiObject2 = Titanium.UI.createButton(); tiObject2.val = "before_val"; // Titaniumのオブジェクトを渡してみる tiObject.tiObject2 = tiObject2; stnObject.tiObject2 = tiObject2; // Titaniumのオブジェクトを更新する tiObject2.val = "after_val"; // 中身を確認すると・・・ // Titaniumのオブジェクトの方は、参照で渡せてるじゃん! Ti.API.info("TitaniumObject:" + tiObject.tiObject2.val); // [INFO] TitaniumObject:after_val // 普通のJavascriptのオブジェクトの方ももちろん渡せている。 Ti.API.info("JavaScriptObject:" + stnObject.tiObject2.val); // [INFO] JavaScriptObject:after_val // 参照渡ししたはずの中身を変更してみる tiObject.myObject.val = "change_val_ti"; tiObject.tiObject2.val = "change_val_ti"; // 中身を確認すると // もしかして変更もできない?! Ti.API.info("TitaniumObject:" + tiObject.myObject.val); // TitaniumObject:before_val // 普通に変更できている Ti.API.info("JavaScriptObject:" + tiObject.tiObject2.val); // JavaScriptObject:change_val_ti // 変更元も当然変更されていない Ti.API.info("MyObject:" + myObject.val); // MyObject:after_val // Titaniumオブジェクトであれば参照渡しだから変更されている Ti.API.info("TitaniumObject:" + tiObject2.val); // TitaniumObject:change_val_ti
つまり、TitaniumのオブジェクトにJavascriptのオブジェクトを渡しても、参照渡しにならず、中身を変更すらできない不思議なオブジェクトになる様子。でも、TitaniumのオブジェクトにTitaniumのオブジェクトを渡すと、普通に参照渡しになる。
iOSの場合のチェックなので、もしかしたらAndroidだと違うのかも。