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

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

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

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
По умолчанию Вызов функции, зная ее String имя

Если вопрос частый, то ткните носом, но только в логически завершенную ветку.
Руководство курил, нашел два метода call и apply, но что-то так запутанно, что непонятно.
Если несложно киньте пару строк кода, пойму с полпинка.

Старый 30.04.2009, 04:08
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
wvxvw
Modus ponens
 
Аватар для wvxvw

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

Старый 30.04.2009, 12:30
SeaQuest вне форума Посмотреть профиль Отправить личное сообщение для SeaQuest Найти все сообщения от SeaQuest
  № 3  
SeaQuest
 
Аватар для SeaQuest

Регистрация: Jun 2007
Адрес: Москва
Сообщений: 86
Спасибо! Очень помогло! Нифига, конечно, не нашел при чем здесь functionScope, зато таки нашел ответ на зарубежном форуме. Вот это работает:
Код AS3:
public function SomeBuiltInFlashFunction(functionName:String, functionParam:Array = null)
		{
    		this[functionName].apply(null, functionParam);
		}

Старый 30.04.2009, 12:51
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 4  
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
жгунчик
functionScope - объект, где есть ссылка на функцию
"functionName" - имя функции
итого:
this - functionScope
functionName - "functionName"

Но, конечно, на иностранном форуме понятнее %)
Короче, если следовать ответу wvxvw, то получается так:
this[functionName](params);

Старый 23.02.2014, 22:01
svdsLis вне форума Посмотреть профиль Отправить личное сообщение для svdsLis Найти все сообщения от svdsLis
  № 5  
svdsLis

Регистрация: May 2013
Сообщений: 18
А что если нужно вписывать такую функцию в прослушиватель событий?
Код AS3:
object.addEventListener(Event.EVENT_START, eventsFunctionsManager[event.name + "_ET"]);
Ошибка:
ArgumentError: Error #1063: Argument count mismatch on src.Core.Events::EventsFunctionsManager/globalClock_ET(). Expected 1, got 0.

Старый 23.02.2014, 22:15
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
А что если нужно вписывать такую функцию в прослушиватель событий?
Если тут речь о встроенном во флеш Event, то, во-первых у него нет константы EVENT_START, а во-вторых, так делать не нужно. Это бессмысленная конструкция.
Скажите, что вам нужно добиться, и узнаете гораздо лучший вариант решения

Старый 23.02.2014, 22:19
svdsLis вне форума Посмотреть профиль Отправить личное сообщение для svdsLis Найти все сообщения от svdsLis
  № 7  
svdsLis

Регистрация: May 2013
Сообщений: 18
1. Константа пользовательская как и сам класс, так что она там есть
2. Почему бессмысленная? Если я заранее не знаю имя приёмника событий!

Старый 23.02.2014, 22:59
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от svdsLis Посмотреть сообщение
1. Константа пользовательская как и сам класс, так что она там есть
2. Почему бессмысленная? Если я заранее не знаю имя приёмника событий!
Потому что приемник должен быть один

Старый 24.02.2014, 00:58
svdsLis вне форума Посмотреть профиль Отправить личное сообщение для svdsLis Найти все сообщения от svdsLis
  № 9  
svdsLis

Регистрация: May 2013
Сообщений: 18
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Потому что приемник должен быть один
Ты предлагаешь на всю программу 1 приёмник использовать? Я не знаю заранее приёмник какого класса мне регистрировать для получения конкретного события. Также хочется узнать как его регистрировать через строку.

Старый 24.02.2014, 09:10
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Я не знаю заранее приёмник какого класса мне регистрировать для получения конкретного события.
Перечитал несколько раз, так и не понял что тут имеется в виду. Это бред какой-то.
Есть "конкретное" событие, значит и слушатель нужно регистрировать на прослушку именно этого "конкретного" события.
Цитата:
Ты предлагаешь на всю программу 1 приёмник использовать?
Программа нуждается в срочной реорганизации. Этот подход приведет к такой каше, и таким утечкам памяти, что потом проще будет удалить весь код и переписать с нуля, чем что-то искать и править. Даже не удивлюсь, если эта программа появится здесь

Цитата:
Также хочется узнать как его регистрировать через строку.
У меня все легко регистрируется. Проблема там явно не в этом.
Код AS3:
package  {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
 
 
	public class TestClass extends Sprite {
 
		private var _eventManager:EventManager = new EventManager();
 
		public function TestClass() {
			stage.addEventListener(MouseEvent.CLICK, onClick);
		}
 
 
		private function onClick(e:MouseEvent):void {
			_eventManager.addEventListener(MouseEvent.CLICK, _eventManager[e.type]); // регистрация с указанием строчного названия метода обработчика
		}
	}
}
import flash.events.EventDispatcher;
 
 
internal class EventManager extends EventDispatcher {
 
	public function EventManager() {
 
	}
	public function click(e:Object):void {
 
	}
}

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

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

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


 


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


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