![]() |
Адресация обьектов во Flex
Всем привет!
Не для кого не секрет что обьекты во Flex передаются в методы по ссылке на адрес в памяти. Но я был удивлен когда проделал следующее: 1. я создаю обьект, например var obj:Object = new Object(); также я написал метод примерно следующего содержания: function updateObj(obj:Object) { obj = new Object(); } например до вызова метода у обьекта obj адрес в памяти 55555555. Затем я вызываю метод updateObj и передаю туда свой обьект, внутри метода obj начинает ссылаться на другой, толькочто созданный обьект в памяти, например его адрес 333333333. НО, по выходу из метода, obj продолжает ссылаться на 55555555! Может ктонибудь прояснить это явление? И как сделать, чтобы этого не происходило??? |
Вы наверно путаете адрес объекта с адресом переменной которая хранит адрес объекта? obj это же не есть объект, это есть переменная и адрес у нее свой а объект как таковой будет new Object() и при каждом вызове будет создаваться новый объект с новым адресом, а адрес переменной obj создается когда вы объявляете var obj и что бы вы туда не присвоили адрес переменной obj останется прежним.
|
Возможно я некорректно сформулировал вопрос, приведу небольшой пример:
Код:
public class ObjTest//b1 - obj2=@d01e6f1 //b2 - obj1=@d01e741 //b3 - obj2=@d01e741 //b4 - obj2=@d01e6f1 - почему тут снова @d01e6f1? |
Потому что это параметр, он опеделяется в скобках при вызове метода:
Код:
updateReference(obj2);Но откройте секрет, для чего же может понадобиться внесение таких недоразумений, как написали вы: Код:
private function updateReference(obj2:Object):void { |
Вложений: 1
я всеголиш хочу, чтобы мой obj2 начал ссылаться на obj1. Я могу сделать это например вот-так:
Код:
public class ObjTestТакже прилогаю рисунок, который пояснит что я хочу сделать. |
Цитата:
|
Замечательно, уже ближе к истине.
я модифицирую пример: Код:
public class ObjTest |
У вас obj2 живет только внутри метода test, если вы хотите, чтобы он был доступен в обоих методах, надо сделать его свойством, таким же как obj1
Код:
public class ObjTest |
Ок! я усовершенствовал свой пример, чтобы показать ради чего все это делается:
Код:
public class ObjTest |
Пример с обычным массивом:
Код:
for (var i:uint = 0;i < array.length;i++) {Если очень хочется, можете написать так (опять же, если array — Array обычный): Код:
private function updateReference(obj:Object):void { |
| Часовой пояс GMT +4, время: 08:43. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.