![]() |
|
||||||||||
|
|
|
|||||
|
Добрый день всем!
у меня возник такой вопрос: есть ли аналог self в классах Action Script 3? поясняю. например, ключевое слово super используется для доступа к родительским методам и свойствам объекта или класса. а ключевое слово self должно использоваться для доступа к сосбтвенным методам и свойствам. я понимаю, что в случаях объекта для этого есть ключевое слово this. но дело в том, что для работы со статичным (static) методами и свойствами это клюевое слово не подходит (в AS3 ругается компилятор). в документации по ООП для AS3 я ничего не нашел по этому вопросу. в частности мне это нужно для реализации примерно такого кода: public class MyClass {
public static var instance:MyClass;
public function MyClass () { /* some code here */ }
public static function getInstance ( autoCreate:Boolean = false ):MyClass {
if ( autoCreate && ! instance ) {
instance = new self ();
}
return( instance );
}
}
var ClassReference:Class = getDefinitionByName( this ) as Class; instance = new ClassReference (); нужно мне это, чтобы в конечном счете получить примерно это: Последний раз редактировалось catyoshi; 27.05.2009 в 15:50. |
|
|||||
|
ветеран форума
|
Хм, а что мешает написать просто new MyClass()?
__________________
4am is time to rock |
|
|||||
|
1. вызов каждый раз метода new будет порождать новый объект. а мне нужно чтобы в свойствах этого класса была ссылка на его объект. таким образом объект можно создать один раз а пользоваться им много раз в разных местах не задумываясь о том был ли создан его экземпляр до этого или нет. вообще в других языках программирования такая штука прокатывала и было очень удобно.
2. не красиво. хочется в одну строчку (дело привыычки). если бы AS3 умел делать как Perl ( MyClass->new()->someMethod() ) или как javaScript ( new MyClass ().someMethod() ), то я бы может и сделал через new, но AS3 такой синтаксис не позволяет.. да и объект у меня будет использоваться несколько раз Последний раз редактировалось catyoshi; 27.05.2009 в 16:08. |
|
|||||
|
Вообще this. не пишите - не будет ругаться)
__________________
2+2=5 |
|
|||||
|
стервочка (я мужик)
|
@catyoshi
DarkLight имеет виду, что надо написать так: |
|
|||||
|
Регистрация: Sep 2008
Адрес: Москва
Сообщений: 224
|
package { import flash.events.EventDispatcher; import flash.events.IEventDispatcher; public class Singelton extends EventDispatcher { private static var _instance:Singelton; public function Singelton() { super(this); if (_instance) { throw new Error("Singelton"); } } public static function getInstance():Singelton { if (!_instance) { _instance = new Singelton(); } return _instance; } } } |
|
|||||
|
ну я так пока и сделал. правда есть одно неудосбтво, которое меня сейчас врядли коснется. если в будущем будет переименован класс, то надо как миниму не забыть переименовать тип перменной instance, имя конструктора и поправить метод getInstace..
вместо возможной одной правки получаем целый набор правок... всем спасибо за помощь. |
|
|||||
|
стервочка (я мужик)
|
catyoshi, и ещё 20 тысяч мест, в которых Ваш класс используется. это ещё важнее.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Для особых, просто редчайших извращенцев: http://etcs.ru/blog/as3/link_to_method_initializer/
|
![]() |
![]() |
Часовой пояс GMT +4, время: 00:12. |
|
|
« Предыдущая тема | Следующая тема » |
|
|