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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.02.2008, 15:44
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 1  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
По умолчанию Непонятнео поведение переменных типа Array вариант Object

Приветствую. Думаю сразу выложу код, так будет показательней. Код на флексе, но проблема чисто as3.
Код:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
		
			private var _myObj:Array = [ 1, 2, 3, 4, 5];
			private var _myObj2:Array = [ 1, 2, 3, 4, 5];			
		
			[Bindable]
			private var myCollection:Array = new Array();
		
			private function onClick(e:Event):void {
				dispatchEvent(new Event('testEvent', true, true));
			}
			private function onClick2(e:Event):void {
				var newItem:Array = new Array();
				newItem = _myObj2;
				newItem.push('qwerty');
				trace(_myObj2.toString());
			}	
					
			private function init():void {
				this.addEventListener('testEvent', onTestEvent);
			}
			
			private function onTestEvent(e:Event):void {
				var newItem:Array = new Array();
				newItem = _myObj;
				newItem.push('qwerty');
				myCollection.push(newItem);
				MyList.dataProvider = myCollection;
				for (var i:int = 0; i < myCollection.length; i++) {
					trace(i + ": " + myCollection[i]);
				}
			}
		]]>
	</mx:Script>
	<mx:List x="504" y="10" width="270" height="455" dataProvider="{myCollection}" id="MyList"></mx:List>
	<mx:Button x="10" y="10" label="Add item" click="onClick(event)"/>
	<mx:Button x="96" y="10" label="Add Item2" click="onClick2(event)"/>
	
</mx:Application>
Объясните мне пожалуйста почему newItem.push('qwerty');
затрагивает _myObj и как этого избежать.

Старый 16.02.2008, 16:20
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 2  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Вобщим с помощью мозга Mr.Fixit`а проблема решилась. Оказывается просто так копирнуть массив нельзя. Необходимо использовать функцию concat() без параметров.
А моя проблема была описана в справке мелким шрифтом гдето в конце абзаца.
Цитата:
Cloning arrays
The Array class has no built-in method for making copies of arrays. You can create a shallow copy of an array by calling either the concat() or slice() methods with no arguments. In a shallow copy, if the original array has elements that are objects, only the references to the objects are copied rather than the objects themselves. The copy points to the same objects as the original does. Any changes made to the objects are reflected in both arrays.
Для объектов еще интересней. Необходимо использовать аш ByteArray(!).
Функция из справки:
Код:
function clone(source:Object):*
{
    var myBA:ByteArray = new ByteArray();
    myBA.writeObject(source);
    myBA.position = 0;
    return(myBA.readObject());
}
Желаю всем читать матчать внимательней, т.к. у меня на решение проблемы ушло 2е суток =\

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

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

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


 


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


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