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

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

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

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
По умолчанию Ошибка в статическом методе класса

Привет! Старожилы, объясните пожалуйста, почему не работает вот это:
Код:
import mx.utils.Delegate;

class Test {
	private static var mov:MovieClip;
	
	function Test (){
		super ();
	}
	
	public static function check ():Void{
		mov = _root.attachMovie ("mc", "mc", 1, {_x: 100, _y: 200});
		mov.onPress = Delegate.create (mov, pressing);
	}
	
	private static function pressing ():Void{
		trace (this);
	}
}
Ошибка:
Код:
'this' is not accessible from this scope.

Старый 28.06.2008, 13:06
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 2  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
"this" это указание на экземпляр этого класса. а метод объявлен статическим, т.е. это метод класса, а не объекта.. такой метод не знает что такое this. кстати, зачем он приватный и статический? где можно его такой можно использовать?

Старый 28.06.2008, 13:27
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
приватный и статический - ну, например есть класс-фабрика, и мы хотим создавать объекты статическим методом типа MyFactory.createObject("objectType") - и, например, нам нужно сделать счетчик / уникальный идентификатор для каждого нового объекта доступный только из самого объекта (потому что если мы сможем его модифицировать у класса-фабрики он может перестать быть уникальным =)
еще пример - синглтон с ленивой инициализацией - нужно создать только 1 экземплар класса, но мы не хотим явно его создавать, а чтобы он был создан / проверен на существование внутри какого-то из его методов - таким образом, например, можно добиться чего-то похожего на множественные конструкторы одного класса (типичное использование - флешка может быть скомпилирована как модуль/как самостоятельное приложение, а нам нужна утилита кторая будит выводить какую-нибудь информацию о том, что в ней происходит, но в разных ситуациях вывод будет разным)
Код:
class Debugger {
private static var d:Debugger;
private function Debugger(){}
private static function createStandaloneDebugger():Debugger
{
return Debugger(new StandaloneDebugger()); //  StandaloneDebugger extends Debugger
}
private static function createNetDebugger():Debugger
{
return Debugger(new NetDebugger()); //  NetDebugger extends Debugger
}
public static function tracer(s:String):Void {
if (isStandalone){
if (!d) d = createStandaloneDebugger();
} else {
if (!d) d = createNetDebugger();
}
}
}
Ну и еще много чего можно придумать
__________________
Hell is the possibility of sanity

Старый 28.06.2008, 18:11
Волгоградец вне форума Посмотреть профиль Отправить личное сообщение для Волгоградец Найти все сообщения от Волгоградец
  № 4  
Ответить с цитированием
Волгоградец
 
Аватар для Волгоградец

блогер
Регистрация: Sep 2007
Адрес: Гамбург
Сообщений: 1,648
Записей в блоге: 12
Статический - для того, чтобы этот метод можно было вызвать из другого статического метода.
Понятно, что this ссылается на экземпляр класса, но я ведь использую Delegate, поэтому this в данном случае ссылаться должен на клип mov.
например отсюда видно:
Код:
import mx.utils.Delegate;

class Test {
	private static var mov:MovieClip;
	
	function Test (){
		super ();
	}
	
	public function check (mc:MovieClip):Void{
		mov = mc.attachMovie ("mc", "mc", 1, {_x: 100, _y: 200});
		mov.onRollOver = Delegate.create (mov, over);
		trace (this)//[Object object]
	}
	
	private function over ():Void{
		trace (this);//_level0.mc
	}
}


Последний раз редактировалось Волгоградец; 29.06.2008 в 13:24.
Старый 28.06.2008, 18:19
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 5  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Привет Волгоградец!

Цитата:
Код:
private static function pressing ():Void{
		trace (this);
	}
Как только Вы уберет аттрибут static все сразу заработает! Почему?! Потому, что в статическом методе класса запрещены ссылки на его экземпляры - компиллятор бастует сразу!
__________________
Случайность, господа, это знаете ли непознанная необходимость.


Последний раз редактировалось Alex_beginner; 28.06.2008 в 18:21.
Старый 28.06.2008, 18:30
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от Волгоградец Посмотреть сообщение
Понятно, что this ссылается на экземпляр класса, но я ведь использую Delegate, поэтому this в данном случае ссылаться должен на клип mov.
А причем тут Delegate? У класса вообще нет такого понятия как this, вот он и ругается.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 28.06.2008, 19:26
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Для этого иногда бывает нужен синглтон - т.е. объект, который можно создать только 1 раз - и его методы будут по факту работать как статические.
Код:
import mx.utils.Delegate;

class StaticTest {
	private static var __i:StaticTest;
	private function StaticTest(){}
	
	public function testFunc0():Void
	{
		trace(this+' static');
		MovieClip(this).onRelease = Delegate.create(this, __i.testFunc1);
	}
	public function testFunc1():Void
	{
		trace(this+' instance');
		MovieClip(this).onRelease = Delegate.create(this, __i.testFunc0);
	}
	public static function testStaticDelegate(mc:MovieClip):Void
	{
		mc.onRelease = Delegate.create(mc, __i.testFunc0);
	}
	public function testInstanceDelegate(mc:MovieClip):Void
	{
		mc.onRelease = Delegate.create(mc, __i.testFunc1);
	}
	public static function getInstance():StaticTest
	{
		if (!__i) __i = new StaticTest();
		return __i;
	}
}
Код:
import StaticTest;
var m:MovieClip = this.attachMovie('a','a',0);
var st:StaticTest = StaticTest.getInstance();
//StaticTest.testStaticDelegate(m);
st.testInstanceDelegate(m);
__________________
Hell is the possibility of sanity

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

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

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


 


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


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