Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 03.08.2011, 21:11
preyko вне форума Посмотреть профиль Отправить личное сообщение для preyko Найти все сообщения от preyko
  № 1  
Ответить с цитированием
preyko

Регистрация: May 2011
Сообщений: 7
По умолчанию Передача ссылки на объект в функцию.

Натолкнулся на одну неприятную особенность AS3. Суть ее состоит в следующем: Присвоить объекту, передаваемому в функцию по ссылке, новое значение можно лишь в двух случаях:

1) Когда переопределяются заранее известные свойства этого объекта:

Код AS3:
function change( target:Point )
{	
	target.x = 300;
	target.y = 300;
}
 
var p:Point = new Point( 100, 100 );
trace( p ); // Выведет (x=100, y=100)
change( p );
trace( p ); // Выведет (x=300, y=300), т.к. свойства объекта были переопределены.
2) Когда новое значение присваивается известному свойству( которое и будет искомым объектом ):

Код AS3:
function change( target:DisplayObject )
{
	target["p"] = new Point( 300, 300 );
}
 
var p:Point = new Point( 100, 100 );
trace( p );
change( this );
trace( p ); // Данный пример в поле Outputs выведет те же значения, что и в первом случае.
Однако эти два варианта не подходят, ибо желаемый результат может быть получен только при присваивании объекту нового экземпляра класса:
Код AS3:
function change( target:Point )
{
	target = new Point( 300, 300 );
}
 
var p:Point = new Point( 100, 100 );
trace( p ); // Выведет (x=100, y=100)
change( p );
trace( p );  // Выведет (x=100, y=100)
Видимо так происходит потому, что в функции вместо ссылки в переменную "target" записывается новый экземпляр класса Point, что не изменяет объект, располагаемый "на другом конце" ссылки. Но не удивительно, что это вообще никаким образом не подходит. Прошу помочь решить.

Создать новую тему   Часовой пояс GMT +4, время: 07:47.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:47.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.