Просмотр полной версии : Что такое ":" ?
SeaQuest
17.01.2009, 18:33
Например строчка var Listener:Object = new Object();
Объявляется локальная переменная Listener далее загадочное ":", а после него создается экземпляр объекта Object().
Нигде не могу найти ответ! :wacko:
Или вот var mc:MovieClip = this.createEmptyMovieClip(...)
http://help.adobe.com/ru_RU/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9d.html
SeaQuest
17.01.2009, 19:39
Спасибо! Я не верно сформулировал вопрос. Что становится с переменной когда осуществляется привязка ее с классом посредством ":"? Как это можно использовать?
Все что я нашел на странице перейдя по ссылке: Можно создать экземпляр класса с помощью оператора new. В следующем примере создается экземпляр с именем CustomClass и выполняется привязка вновь созданного экземпляра класса переменной с именем customItem.
var customItem:CustomClass = new CustomClass();
Когда переменной назначают тип данных и присваивают значение - тут все понятно.
Но как переменной можно присвоить экземпляр класса?
Но как переменной можно присвоить экземпляр класса?Я спрошу по-другому: как, не сохранив ссылку на этот экземпляр в переменной, Вы собираетесь дальше с ним работать?
Т.е. Вы написали:new CustomClass();Отлично, экземпляр создан! А теперь давайте зададим ему _х равный 10.
Так что не только можно, а просто неизбежно.
SeaQuest
17.01.2009, 20:36
Вот все равно не пойму при том, что уже не новичек.
MyClass = new CustomClass();
Я теперь могу обращаться ко всем методам и свойствам класса CustomClass через экземпляр класса MyClass используя точечный синтаксис. При чем здесь переменная? Разьве что можно создать дополнительное свойство экземляра
MyClass.myVariable = anythin;
И тут myVariable будет выполнять роль переменной, но при этом не будет ей являться в чистом виде. Так все же зачем эти "привязанные" переменные?
И что здесь MyClass, если не переменная? То что Вы написали ее в "ленивом" стиле, еще не значит, что это... А кстати что это по-вашему? Имя экземпляра, я так чувствую?
И кто Вам сказал, что через экземпляр Вы будете иметь доступ ко всем свойствам и методам класса? Вот уж не факт)))
Добавлено через 7 минут
Что происходит здесь?
MyClass = new CustomClass();
MyClass = 3;
trace(MyClass);Оказывается, это не имя а переменная(((
SeaQuest
17.01.2009, 21:18
А кстати что это по-вашему?
Не по моему, а по тому, что вычитал в книжке это имя экземпляра класса.
И кто Вам сказал, что через экземпляр Вы будете иметь доступ ко всем свойствам и методам класса? Именно так и написано в учебнике, что доступ к методам и свойствам, через экземпляр. И тут на тебе узнаю что меня где-то жестоко обманули. Теперь вообще нифига не понимаю :(
MyClass = new CustomClass();
MyClass = 3;
trace(MyClass);
В этом примере MyClass - действительно играет роль переменной, потому как не было обращения ни к свойству, ни к методу по типу MyClass.myMetod().
Лучше объясните при чем здесь таки привязанные переменные.
В них сохраняется ссылка на экземпляр, без которой Вы никак не сможете к этому экземпляру обратиться. Привязанные - я не очень в курсе этого термина, думаю это как раз неудачный перевод слова 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
Переменная не может себя "вести", это Вы ее ведете. Расценивайте это как ИМЯ ЭКЗЕМПЛЯРА, тем более что всеравно никакого "имени экземпляра" не существует (кроме уже упомянутого instance name дисплейных объектов, которого у них не может не быть). Существуют только ссылки на экземпляры, и эти ссылки могут храниться только в переменных. Можете называть их именами. Только если Вы запросите name у дисплейного объекта, он Вам его вернет. А вот созданный через new знать не знает, что Вы ему дали "имя". Вы только можете создать у этого экземпляра свойство name и вбить туда "Вася". Если при этом переменная с ссылкой на этот экземпляр будет называться "Маша", у компилятора ни один мускул не дрогнет. И если Вы напишите в своей программе Вася.height - никогда не узнаете его рост. Только рост Маши. Потомучто и height, и "Вася" - это только свойства Маши))))
SeaQuest
18.01.2009, 17:01
Спасибо за ссылку, но на предыдущий вопрос это не отвечает. Ответьте пожалуйста прямо! Я читал руководства, книжки, ответы и ссылки на этом посте но прямого ответа так и нет. Предлагаю вынести эту тему в FAQ, думаю не мало новичков на этом будут ломать мозг.
В FAQ этот точно не попадет. Нет, ни часто встречающемуся вопроса, ни самого четкого вопроса и ответа.
SeaQuest
18.01.2009, 18:59
Существуют только ссылки на экземпляры, и эти ссылки могут храниться только в переменных.
То есть MyDate, в следующем примере - это ссылка на экземпляр.
MyDate :Date = new Date();
А что тогда это?
MyDate = new Date()
Тоже ссылка на экземпляр? Тогда чем она отличается от переменной, являющейся ссылкой на экземпляр?
Wolsh, Вы об этих принципах где-то узнали. Подскажите источники, где можно об этих основах прочитать. Я хочу понимать это, а не копипастить. У меня 4 книжки по флешу и ни в одной об этом не разъясняется.
Отличается тем, что в первом случае эта переменная может хранить ссылку только на экземпляр класса Date. A Number не может, и String, и MovieClip. И всё, больше ничем. (Только переменной без var невозможно задать тип данных).
DarkLight
18.01.2009, 19:06
var - обьявление переменной. Переменная может быть типизированной и нетипизированной. В 1ом случае через двоеточие указывается тип переменной (имя класса). Обьявление var d:Date = new Date() аналогично выражению Date d = new Date(); в Java например. Так понятнее?
Ваш 2ой код - присвоение значения необьявленной нетипизированной переменной. AS1 создает в этом случае переменную сам, в этом его мягкость, на мой взгляд, излишняя. AS3 такой конструкции, например, уже не допустит, требуя корректного обьявления переменной.
Что такое вообще экземпляр класса? Это в любом случае наследник от 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
...Подскажите источники, где можно об этих основах прочитать. Я хочу понимать это...
Да вы наверно не те книжки прикупили. Вот выдержка из предложенного ранее ХЭЛПА:
Для связи переменной с типом данных это необходимо при объявлении переменной. Объявление переменной без указания ее типа разрешено, но при этом будет создаваться предупреждение в строгом режиме компилятора. Тип переменной назначается добавлением к имени переменной двоеточия : с последующим указанием типа этой переменной. Например, в следующем программном коде объявляется переменная 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
Привет!
Для SeaQuest. Скачайте ХЭЛП по АС3.
Скачайте ХЭЛП по АС2.
Это самые лучшии "книжки", если не считать К. Мука.
Его читать в первую очередь.
И прикрепил из ХЭЛПа раздел операторов. Читать про :
ЗЫ
Возможно будет немного долго загружаться из-за обильного присутсвия "onclick="javascript:...".
Успехов!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.