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

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

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

Регистрация: Sep 2005
Сообщений: 11
По умолчанию Инициализация полей-объектов

вот такая вот вещь. есть два класаа

Код:
class Class1
{
	public var object : Object = new Object();
	
	public function Class1()
	{
	}
}

class Class2
{
	public var object : Object ;
	
	public function Class2()
	{
		this.object = new Object()
	}
}
и кот:

Код:
var obj11 : Class1 = new Class1();
var obj12 : Class1 = new Class1();
var obj21 : Class2 = new Class2();
var obj22 : Class2 = new Class2();

trace (obj11.object == obj12.object); // true
trace (obj21.object == obj22.object); // false
вот почему так? получается что инициализация полей происходит не при создании объектов класса, а при инициализации самого класса. Это протеворечит ОО-принципам? или это просто извращенная реализации ООП в АС2?


Последний раз редактировалось Kopilkus; 26.08.2007 в 15:20.
Старый 26.08.2007, 15:13
Mr. Fixit вне форума Посмотреть профиль Найти все сообщения от Mr. Fixit
  № 2  
Ответить с цитированием
Mr. Fixit
Banned

Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
почему так записали:
Цитата:
var obj11 : Class1 = new Class();
а не так?
Код:
var obj11 : Class1 = new Class1();
разве правильно вызван класс?

Старый 26.08.2007, 15:20
Kopilkus вне форума Посмотреть профиль Отправить личное сообщение для Kopilkus Найти все сообщения от Kopilkus
  № 3  
Ответить с цитированием
Kopilkus
 
Аватар для Kopilkus

Регистрация: Sep 2005
Сообщений: 11
сори, очепяточка. поправил

Старый 26.08.2007, 22:06
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 4  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
В твоем примере ничего не противоречит. Выдержка из хэлпа на эту тему: "When you initialize properties inline, the expression on the right side of an assignment must be a compile-time constant. That is, the expression cannot refer to anything that is set or defined at runtime. Compile-time constants include string literals, numbers, Boolean values, null, and undefined, as well as constructor functions for the following top-level classes: Array, Boolean, Number, Object, and String."
" == equality operator -- Variables representing objects, arrays, and functions are compared by reference. Two such variables are equal if they refer to the same object, array, or function."

Почему такой результат, я хз.


Последний раз редактировалось udaaff; 26.08.2007 в 22:11.
Старый 26.08.2007, 22:34
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Это баг в AS2. Запись
Код:
public var object : Object = new Object();
делает object статичным свойством, а не свойством экземпляра. Из-за этого в
Код:
trace (obj11.object == obj12.object);
получаем true.
Поэтому надо все значение присваивать в конструкторе.
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 26.08.2007 в 22:37.
Старый 27.08.2007, 02:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от iNils
Поэтому надо все значение присваивать в конструкторе.
И лучше это делать всегда и везде.

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

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

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


 


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


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