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

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

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

Регистрация: Dec 2009
Сообщений: 58
По умолчанию доступ к свойствам объекта из конструктора

Добрый день =)

Уважаемые товарищи! Есть код:
Код AS3:
class Class_1
{
	private var _state;
	public var _mc:MovieClip;
 
	//конструктор
	public function Class_1(mc:MovieClip)
	{
		_mc = mc;
		_state = 123;
 
		mc.onRelease = function()
		{
			trace(this._state);
		}
	}
}
когда создаю объект и нажимаю на кнопку, в output выводится
Код AS3:
undefined
что свидетельствует о том, что переменная _state не доступна из функции onRelease

Вопрос: как правильно осуществить доступ к переменной _state из ф-ции onRelease.
Спасибо!

Старый 18.01.2010, 16:12
dmitriev вне форума Посмотреть профиль Отправить личное сообщение для dmitriev Найти все сообщения от dmitriev
  № 2  
Ответить с цитированием
dmitriev
 
Аватар для dmitriev

Регистрация: Jun 2007
Адрес: Челябинск
Сообщений: 303
Отправить сообщение для dmitriev с помощью ICQ
Код AS3:
mc.onRelease = function()
В 3АС так уже не делают, а делают так:

Код AS3:
class Class_1
{
	private var _state;
	public var _mc:MovieClip;
 
	//конструктор
	public function Class_1(mc:MovieClip)
	{
		_mc = mc;
		_state = 123;
 
		mc.addEventListener(MouseEvent.CLICK, clickListener);
	}
 
        private function clickListener(event:MouseEvent):void {
                trace(_state);
        }
}
__________________
O God! The Aftermath.

Старый 18.01.2010, 19:09
v0vka вне форума Посмотреть профиль Отправить личное сообщение для v0vka Найти все сообщения от v0vka
  № 3  
Ответить с цитированием
v0vka
 
Аватар для v0vka

Регистрация: Dec 2009
Сообщений: 58
спасибо

Добавлено через 50 минут
скажите а как это реализовать в AS 2.0 ?

Добавлено через 50 минут
Upd: просьба перенести в соответствующий раздел

Старый 19.01.2010, 08:36
Juice_Green вне форума Посмотреть профиль Отправить личное сообщение для Juice_Green Посетить домашнюю страницу Juice_Green Найти все сообщения от Juice_Green
  № 4  
Ответить с цитированием
Juice_Green
 
Аватар для Juice_Green

Регистрация: Dec 2005
Адрес: Новосибирск
Сообщений: 529
Отправить сообщение для Juice_Green с помощью ICQ Отправить сообщение для Juice_Green с помощью Skype™
а что просто trace(_state); не выводит в AS2?

Старый 19.01.2010, 17:24
v0vka вне форума Посмотреть профиль Отправить личное сообщение для v0vka Найти все сообщения от v0vka
  № 5  
Ответить с цитированием
v0vka
 
Аватар для v0vka

Регистрация: Dec 2009
Сообщений: 58
если бы выводило я бы не спросил
область видимости в onRelease собственная как оказалось
даже не смотря на то что я её определяю в классе

Старый 19.01.2010, 17:34
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Используйте делегат
В AS2 обработчик вызывается в области видимости того объекта, через который он вызывается.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код AS1/AS2:
class ClassA
{
	private var _state:Number;
	public var _mc:MovieClip;
 
	//конструктор
	public function ClassA(mc:MovieClip)
	{
		super();
		this._mc = mc;
		this._state = 123;
		mc.onRelease = Delegate.create(this, mc_onReleaseDelegate);
	}
 
	private function mc_onReleaseDelegate():Void
	{
		trace(this._state);
	}
}
Код AS1/AS2:
/**
 * The Delegate class creates a function wrapper to let you run a function in the context
 * of the original object, rather than in the context of the second object, when you pass a
 * function from one object to another.
 */
class com.aditall.utils.Delegate extends Object
{
	private var _func:Function;
	private var _arguments:Array;
	private var _scope:Object;
 
	/**
	 * Constructor. Creates new Delegate instance.
	 * @param	f 		Function. Function to be converted to a delegate.
	 * @param	args	Array. (Optional) The arguments to be passed to the.
	 * @param	obj		Object. (Optional) The scope of the delagate.
	 * delegate when it will be called.
	 */
	public function Delegate(f:Function, args:Array, obj:Object)
	{
		super();
		this._func = f;
		this._arguments = args;
		if (obj) this._scope = obj;
	}
 
	/**
	 * Creates a delegate function for a Context object specified in "obj"
	 * parameter.
	 * @param	obj	Object. Context in which to run the function. If no contex specified will
	 * run in the scope set in the constructor.
	 * @return	Function. A delegate function scoped to the Context object.
	 */
	public function createDelegate(obj:Object):Function
	{
		if (!obj) obj = this._scope;
		return create(obj, this._func, this._arguments);
	}
 
	/**
	 * Creates a functions wrapper for the original function so that it runs 
	 * in the provided context.
	 * @param obj 		Context in which to run the function.
	 * @param func 		Function to run.
	 * @param fargs 	Array (Optional) of arguments to pass to the function.
	 */
	public static function create(obj:Object, func:Function, fargs:Array):Function
	{
		var f:Function = function():Object
		{
			var target:Object = arguments.callee.target;
			var fnc:Function = arguments.callee.func;
			var fa:Array = arguments.callee.args;
			if (arguments.length) fa = fa.concat(arguments);
			return fnc.apply(target, fa);
		};
		f.target = obj;
		f.func = func;
		if (fargs) f.args = fargs;
		else f.args = [];
		return f;
	}
 
	/**
	 * [Readonly]
	 * The default contex to call createDelegate, (readonly).
	 */
	public function get scope():Object { return this._scope };
 
	public function set scope(obj:Object):Void { return; };
}
Отыскался Прям молодость вспомнил
__________________
Hell is the possibility of sanity

Старый 19.01.2010, 17:46
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 8  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Тут и стандартного хватит из mx.utils

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А чем он более стандартный?
__________________
Hell is the possibility of sanity

Старый 19.01.2010, 20:03
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 10  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Тем, что уже имеется в наличии

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

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

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


 


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


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