Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Инициализация полей-объектов (http://www.flasher.ru/forum/showthread.php?t=100376)

Kopilkus 26.08.2007 15:08

Инициализация полей-объектов
 
вот такая вот вещь. есть два класаа

Код:

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?

Mr. Fixit 26.08.2007 15:13

почему так записали:
Цитата:

var obj11 : Class1 = new Class();
а не так?
Код:

var obj11 : Class1 = new Class1();
разве правильно вызван класс?

Kopilkus 26.08.2007 15:20

сори, очепяточка. поправил

udaaff 26.08.2007 22:06

В твоем примере ничего не противоречит. Выдержка из хэлпа на эту тему: "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."

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

iNils 26.08.2007 22:34

Это баг в AS2. Запись
Код:

public var object : Object = new Object();
делает object статичным свойством, а не свойством экземпляра. Из-за этого в
Код:

trace (obj11.object == obj12.object);
получаем true.
Поэтому надо все значение присваивать в конструкторе.

etc 27.08.2007 02:35

Цитата:

Сообщение от iNils
Поэтому надо все значение присваивать в конструкторе.

И лучше это делать всегда и везде.


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

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