Я пытаюсь изменить Object
в другом классе. Так что у меня есть что-то вроде этого:Как пройти по ссылке в ActionScript?
MainClass.as:
..
var myObject:Object = new Object();
Class2_Instance.get_JSON(myObject);
trace(myObject.id); // output: undefined. whereas it should be 42. see below.
..
Class2.as
public function get_JSON(url:String , the_object:Object)
{
var request:URLRequest = new URLRequest(url);
var variables:URLLoader = new URLLoader();
variables.dataFormat = URLLoaderDataFormat.TEXT;
variables.addEventListener(Event.COMPLETE, Complete_Handler_JSON(the_object));
try
{
variables.load(request);
}
catch (error:Error)
{
trace("Unable to load URL: " + error);
}
}
function Complete_Handler_JSON(the_object:Object):Function
{
return function(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
the_object = JSON.parse(loader.data);
trace(the_object.id); //returns 42.
};
}
Так операция JSON выполняет правильно в Class2, и он присваивает .parse()
значение the_object
, но я думаю, что я не понимаю с логикой AS-pass-by-reference. Поскольку я ожидал, что myObject
в MainClass.as тоже изменится.
Что мне сделать, чтобы изменить значение аргумента функции (myObject) напрямую?
Спасибо!
объекты передаются по ссылке по умолчанию. the_object не myObject. Попробуйте вернуть объект__объекта после его создания в Class2_Method. Вы можете обнаружить, что в долгосрочной перспективе вам лучше идти с другим дизайном, чем статические методы. –
@AmyBlankenship Спасибо, сегодня у меня возникли трудности с возвратом из CompleteHandler (так как они ждут завершения URLRequest, «асинхронный» - это термин, который я предполагаю), поэтому я пытался найти способ без возврата. И что вы подразумеваете под нестационарными методами? И я думаю, что я должен отредактировать свой вопрос, чтобы добавить фактический код. – void
Я действительно смущен. если the_object не является myObject, тогда как это «pass-by-reference»? И в руководстве Adobe.com говорится, что значение myObject WILL изменится, но это не так:/И я не могу вернуться из CompleteHandler. Итак, как я могу сохранить массив JSON? – void