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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

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

Регистрация: Sep 2004
Сообщений: 4
По умолчанию А можно передавать объект не по ссылке, а по значению?

Писал вот что-то в таком духе:
a={};
b={};
a=b;
a.q="a";
И с некоторым удивлением обнаружил, что при этом b.q="a",
причем связь эта динамически отслеживается, так что получилась паразитная (в моем случае) обратная связь.
Не придумал ничего лучше, чем приравнивать каждое свойство по отдельности, но сдается мне способ достаточно извращенский. Может кто подскажет что-нибудь поумнее, а?
З.Ы. И еще вопрос не по теме однако тоже весьма меня интересующий: как удалить все элементы массива разом?

Старый 16.09.2004, 00:46
gason вне форума Посмотреть профиль Отправить личное сообщение для gason Найти все сообщения от gason
  № 2  
gason

Регистрация: Jul 2002
Адрес: Россия
Сообщений: 16
По умолчанию как да как

a наследник б
a=[1,2,3,4,5]; // вот создал
a.length = 0; // вот удалил



// а еще смотри как ты удивишься ...

b={}
a=b
b.q = 1;
trace (a.q)

/* да бывают чудеса на свете, чтоб чудес не было книги нада читать, а не ломать голову другим людям!. не обж.. шучу
*/
__________________
думать надо...

Старый 17.09.2004, 15:47
Zloglik вне форума Посмотреть профиль Отправить личное сообщение для Zloglik Найти все сообщения от Zloglik
  № 3  
Zloglik

Регистрация: Sep 2004
Сообщений: 4
Цитата:
Оригинал написал(а) gason
a=[1,2,3,4,5]; // вот создал
a.length = 0; // вот удалил
[/b]
За это спасибо

Цитата:
Оригинал написал(а) gason
// а еще смотри как ты удивишься ...
b={}
a=b
b.q = 1;
trace (a.q)
[/b]
А вот и не удивлюсь - это я и сам сообразил
Вопрос, то, собственно, в чем?
Как сделать так чтобы a не отслеживал изменений b

Цитата:
Оригинал написал(а) gason
/* да бывают чудеса на свете, чтоб чудес не было книги нада читать, а не ломать голову другим людям!. не обж.. шучу
*/ [/b]
Читаю. А вообще, весьма непротсто найти нормальную книжку
99% - тупые самоучители

Старый 17.09.2004, 16:14
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
По умолчанию Re: как да как

Цитата:
Оригинал написал(а) gason
a наследник б
"а" есть ССЫЛКА на "b"
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.09.2004, 20:07
Zloglik вне форума Посмотреть профиль Отправить личное сообщение для Zloglik Найти все сообщения от Zloglik
  № 5  
Zloglik

Регистрация: Sep 2004
Сообщений: 4
Блин, да знаю я что a - ссылка на b

Старый 17.09.2004, 20:17
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Цитата:
Оригинал написал(а) [subway]design
Насчет "массивов" это все, конечно, верно, но лично для меня в АС неудобна следующая "фишка":
В АС нет такой вещи, как указатель или оператор ссылки (в Си++ - &). И все присваивания по ссылке/по значению происходят автоматически. Как это реализуется:

obj={a:10};
objRef=obj;
objRef.a++;
trace(obj.a); // выдает 11.

Типичный пример автоматического присваивания адреса объекта, а не его содержимого другой переменной при прямом присваивании, даже, если переменная - объект того же класс. Это справедливо, хотя бывает неудобно при копировании массивов ("массив" - объект класса Array). Поэтому пригодиться такой код:

Array.prototype.copy=function(a)
{
this.splice(0);
for(i=0;i<a.length;i++)
{
this[i]=a[i];
}

};

Как пользоваться можно догадаться.

Отступление: в случае копирования объектов оператором присваивания пригодилась бы возможность перегрузки функций, которая повлекла бы за собой введение типов данных, что сделало бы АС неудобным для "легких" скриптов.
...

Хуже становится, когда надо передать ссылку на скаляр (строку или число), а они при присваивании/передачи в ф-цию копируются и передают значение. Это совсем хреново, так как иногда требуется строгая независимость объектов, но одни объекты должны передавать другим ссылки на свои элементы, причем имена этих эл-тов должны быть известны только содержащему их объекту. А если такой элемент - скаляр?

Такие дела.
взято отсюда
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.09.2004, 20:19
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 7  
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Копировать объект, может что-то типа этого.


Код:
Object.prototype.copy = function()
{
	var tempObj = new Object();
	for (var i in this)
	{
		tempObj[i] = this[i];
	}
	return tempObj;
}
Использование.
Код:
a = new Object();
a.q = 100;

b = a.copy();
b.q = 200

trace(a.q);
trace(b.q)
P/S/ По-спокойней надо быть.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.


Последний раз редактировалось dimarik; 17.09.2004 в 20:27.
Старый 17.09.2004, 20:25
Lorex вне форума Посмотреть профиль Отправить личное сообщение для Lorex Посетить домашнюю страницу Lorex Найти все сообщения от Lorex
  № 8  
Lorex
 
Аватар для Lorex

Регистрация: Aug 2003
Адрес: Украина, Львов
Сообщений: 129
попоробуй сделать функцию, которая создает другой обьект и "врукопашную" копируй туда значения... может так "наводить"не будет....не пробовал,...

Старый 18.09.2004, 11:39
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 9  
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
три раза одно и тоже )

a = [5];
b = a.slice (0);

trace ("до");
trace (a);
trace (b);
b[0] += 7;
trace ("после");
trace (a);
trace (b);


Последний раз редактировалось iNils; 18.09.2004 в 11:44.
Старый 18.09.2004, 11:44
Жень Шень вне форума Посмотреть профиль Отправить личное сообщение для Жень Шень Найти все сообщения от Жень Шень
  № 10  
Жень Шень
 
Аватар для Жень Шень

блогер
Регистрация: Feb 2004
Адрес: Украина
Сообщений: 1,180
Записей в блоге: 3
Отправить сообщение для Жень Шень с помощью ICQ
Цитата:
Оригинал написал(а) Zloglik

А вот и не удивлюсь - это я и сам сообразил
Вопрос, то, собственно, в чем?
Как сделать так чтобы a не отслеживал изменений b
Может это поможет проблеме?
a = new Array("a1", "b1", "c1");
b = new Array();
b = a.concat();
trace(b[0]);
trace(b[1]);
trace(b[2]);
b[0]= "f1"
trace(a[0]);
trace(b[0]);
Есть еще один полезный метод: slice()

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

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

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


 


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


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