Форум 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=120331)

SeaQuest 17.01.2009 18:33

Что такое ":" ?
 
Например строчка var Listener:Object = new Object();
Объявляется локальная переменная Listener далее загадочное ":", а после него создается экземпляр объекта Object().
Нигде не могу найти ответ! :wacko:
Или вот var mc:MovieClip = this.createEmptyMovieClip(...)

MrPoma 17.01.2009 19:08

http://help.adobe.com/ru_RU/ActionSc...0204-7f9d.html

SeaQuest 17.01.2009 19:39

Спасибо! Я не верно сформулировал вопрос. Что становится с переменной когда осуществляется привязка ее с классом посредством ":"? Как это можно использовать?
Все что я нашел на странице перейдя по ссылке:
Цитата:

Можно создать экземпляр класса с помощью оператора new. В следующем примере создается экземпляр с именем CustomClass и выполняется привязка вновь созданного экземпляра класса переменной с именем customItem.
var customItem:CustomClass = new CustomClass();
Когда переменной назначают тип данных и присваивают значение - тут все понятно.
Но как переменной можно присвоить экземпляр класса?

Wolsh 17.01.2009 20:12

Цитата:

Но как переменной можно присвоить экземпляр класса?
Я спрошу по-другому: как, не сохранив ссылку на этот экземпляр в переменной, Вы собираетесь дальше с ним работать?
Т.е. Вы написали:
Код:

new CustomClass();
Отлично, экземпляр создан! А теперь давайте зададим ему _х равный 10.
Так что не только можно, а просто неизбежно.

SeaQuest 17.01.2009 20:36

Вот все равно не пойму при том, что уже не новичек.
MyClass = new CustomClass();
Я теперь могу обращаться ко всем методам и свойствам класса CustomClass через экземпляр класса MyClass используя точечный синтаксис. При чем здесь переменная? Разьве что можно создать дополнительное свойство экземляра
MyClass.myVariable = anythin;
И тут myVariable будет выполнять роль переменной, но при этом не будет ей являться в чистом виде. Так все же зачем эти "привязанные" переменные?

Wolsh 17.01.2009 20:50

И что здесь MyClass, если не переменная? То что Вы написали ее в "ленивом" стиле, еще не значит, что это... А кстати что это по-вашему? Имя экземпляра, я так чувствую?
И кто Вам сказал, что через экземпляр Вы будете иметь доступ ко всем свойствам и методам класса? Вот уж не факт)))

Добавлено через 7 минут
Что происходит здесь?
Код:

MyClass = new CustomClass();
MyClass = 3;
trace(MyClass);

Оказывается, это не имя а переменная(((

SeaQuest 17.01.2009 21:18

Цитата:

А кстати что это по-вашему?
Не по моему, а по тому, что вычитал в книжке это имя экземпляра класса.
Цитата:

И кто Вам сказал, что через экземпляр Вы будете иметь доступ ко всем свойствам и методам класса?
Именно так и написано в учебнике, что доступ к методам и свойствам, через экземпляр. И тут на тебе узнаю что меня где-то жестоко обманули. Теперь вообще нифига не понимаю :(
Код AS1/AS2:

MyClass = new CustomClass();
MyClass = 3;
trace(MyClass);

В этом примере MyClass - действительно играет роль переменной, потому как не было обращения ни к свойству, ни к методу по типу MyClass.myMetod().
Лучше объясните при чем здесь таки привязанные переменные.

Wolsh 17.01.2009 22:18

В них сохраняется ссылка на экземпляр, без которой Вы никак не сможете к этому экземпляру обратиться. Привязанные - я не очень в курсе этого термина, думаю это как раз неудачный перевод слова LINK (ссылка). Дело в том, что после строчки MyClass = 3; Вы навсегда теряете возможность обратиться к Вашему экземпляру, его свойствам и методам. Так что переменная действительно "привязана" и заменяет instance name (которое вообщето бывает только у дисплейных объектов, создаваемых в АС2 через create... а не через new). Указание типа данных для переменной, хранящей ссылку на экземпляр, существенно снижает ошибку, так как компиллятор просто не даст Вам присвоить этой переменной значение 3, сгенерировав ошибку компилляции. Конечно, от ошибок логики это не спасет, тем не менее. Ну и плюс читабельность и понятность кода другим (и Вам через месяц).

Добавлено через 9 минут
Проще говоря, то что Вы (или книга) называет "привязкой переменной к классу" - это объявление типа данных для переменной. Это значит, что никакой другой тип данных не может быть сохранен в этой переменной, в данном случае - только экземпляр класса CustomClass. Его Вы и сохраняете. А тройку не сможете.

SeaQuest 17.01.2009 22:34

Понял! Получается такая привязанная переменная будет вести себя как экземпляр класса, верно? То есть сама по себе она ничего не содержит, а пользоваться ей можно с таким же синтаксисом как и с экземпляром да?
То я понял что это, а как применять пока вопрос.

chingachgoog 18.01.2009 02:51

http://flasher.ru/forum/showthread.php?t=120104

Wolsh 18.01.2009 03:37

Переменная не может себя "вести", это Вы ее ведете. Расценивайте это как ИМЯ ЭКЗЕМПЛЯРА, тем более что всеравно никакого "имени экземпляра" не существует (кроме уже упомянутого instance name дисплейных объектов, которого у них не может не быть). Существуют только ссылки на экземпляры, и эти ссылки могут храниться только в переменных. Можете называть их именами. Только если Вы запросите name у дисплейного объекта, он Вам его вернет. А вот созданный через new знать не знает, что Вы ему дали "имя". Вы только можете создать у этого экземпляра свойство name и вбить туда "Вася". Если при этом переменная с ссылкой на этот экземпляр будет называться "Маша", у компилятора ни один мускул не дрогнет. И если Вы напишите в своей программе Вася.height - никогда не узнаете его рост. Только рост Маши. Потомучто и height, и "Вася" - это только свойства Маши))))

SeaQuest 18.01.2009 17:01

Спасибо за ссылку, но на предыдущий вопрос это не отвечает. Ответьте пожалуйста прямо! Я читал руководства, книжки, ответы и ссылки на этом посте но прямого ответа так и нет. Предлагаю вынести эту тему в FAQ, думаю не мало новичков на этом будут ломать мозг.

iNils 18.01.2009 17:31

В FAQ этот точно не попадет. Нет, ни часто встречающемуся вопроса, ни самого четкого вопроса и ответа.

SeaQuest 18.01.2009 18:59

Цитата:

Существуют только ссылки на экземпляры, и эти ссылки могут храниться только в переменных.
То есть MyDate, в следующем примере - это ссылка на экземпляр.
Код AS1/AS2:

MyDate :Date = new Date();

А что тогда это?
Код AS1/AS2:

MyDate = new Date()

Тоже ссылка на экземпляр? Тогда чем она отличается от переменной, являющейся ссылкой на экземпляр?

Wolsh, Вы об этих принципах где-то узнали. Подскажите источники, где можно об этих основах прочитать. Я хочу понимать это, а не копипастить. У меня 4 книжки по флешу и ни в одной об этом не разъясняется.

Wolsh 18.01.2009 19:01

Отличается тем, что в первом случае эта переменная может хранить ссылку только на экземпляр класса Date. A Number не может, и String, и MovieClip. И всё, больше ничем. (Только переменной без var невозможно задать тип данных).

DarkLight 18.01.2009 19:06

var - обьявление переменной. Переменная может быть типизированной и нетипизированной. В 1ом случае через двоеточие указывается тип переменной (имя класса). Обьявление
Код AS1/AS2:

var d:Date = new Date()

аналогично выражению
Цитата:

Date d = new Date();
в Java например. Так понятнее?

Ваш 2ой код - присвоение значения необьявленной нетипизированной переменной. AS1 создает в этом случае переменную сам, в этом его мягкость, на мой взгляд, излишняя. AS3 такой конструкции, например, уже не допустит, требуя корректного обьявления переменной.

Wolsh 18.01.2009 19:34

Что такое вообще экземпляр класса? Это в любом случае наследник от Object. Это просто набор объединенных данных (свойств), так или иначе поименованных или проиндексированных. Физически это просто компания из нескольких данных в памяти, программно - компания из ссылок на них. И это - любой экземпляр любого класса.
Имя, как Вы его называете, это имя переменной. Но не забывайте, что переменные существуют не сами по себе в космосе, они создаются внутри других объектов как их свойства. Любая переменная - это чье-то свойство, т.е. еще одна ячейка памяти, входящая в некое сообщество. Вы пишете либо явно: mc.id=2 создавая в mc динамическое свойство-переменную id, либо внутри mc (или в теле класса) пишете var id:Number = 2, и это тоже самое, только в первом случае Вы не можете жестко задать тип данных, которые могут быть записаны в ячейку памяти, на которую указывает id.
Вариант просто написать id=2 бессмысленно рассматривать, это - АС1, в котором объявления типов не было вообще. То, что многие так пишут и в АС2 - это их дело, причина - в том что постоянно вырывают код из АС1 исходников, так писать просто допустимо, но никем и никогда не рекомендуется. Это тоже, что использовать конструкции вроде onClipEvent и on(press) - можно, но это не АС2.

Жень Шень 19.01.2009 12:03

Цитата:

Сообщение от SeaQuest (Сообщение 791849)
...Подскажите источники, где можно об этих основах прочитать. Я хочу понимать это...

Да вы наверно не те книжки прикупили. Вот выдержка из предложенного ранее ХЭЛПА:
Цитата:

Для связи переменной с типом данных это необходимо при объявлении переменной. Объявление переменной без указания ее типа разрешено, но при этом будет создаваться предупреждение в строгом режиме компилятора. Тип переменной назначается добавлением к имени переменной двоеточия : с последующим указанием типа этой переменной. Например, в следующем программном коде объявляется переменная i, которая имеет тип int.
var i:int;
Значение переменной можно задать, используя оператор присваивания (=). Например, в следующем коде объявляется переменная i и ей назначается значение 20.
...
...
Можно создать экземпляр класса с помощью оператора new. В следующем примере создается экземпляр с именем CustomClass и выполняется привязка вновь созданного экземпляра класса переменной с именем customItem.
var customItem:CustomClass = new CustomClass();

SeaQuest 20.01.2009 04:21

Жень Шень, благодарю, на конкретно той странице про переменные я этого не нашел. Сегодня повторил книжку Гари Розенцвейга "Создание игр с помощью Action Script" с надписью на пол книги Macromedia Flash 8. Во всей книге я не нашел AS2 скрипта! Везде AS1, код в мувиках! Классов нима! Внешней подгрузки тож, все аттачится из бб, и дублируется со сцены! И при этом 8 версия! Редакторы просто написали новое название, дабы не терять денег.
Тема закрыта, я счастлив! :)

Жень Шень 20.01.2009 10:52

Вложений: 1
Привет!
Для SeaQuest. Скачайте ХЭЛП по АС3.
Скачайте ХЭЛП по АС2.
Это самые лучшии "книжки", если не считать К. Мука.
Его читать в первую очередь.
И прикрепил из ХЭЛПа раздел операторов. Читать про :
ЗЫ
Возможно будет немного долго загружаться из-за обильного присутсвия "onclick="javascript:...".
Успехов!


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

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