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

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

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

Регистрация: Mar 2010
Сообщений: 51
По умолчанию Функции в Object

Нашёл в исходнике чата для вконтакта нечто подобное
Код AS3:
dp.request(DataProvider.GET_PROFILES, 				
{
	params: dpparam,
	onComplete: function(data) 
	{
		output2.text = data[0].first_name + ' ' + data[0].last_name + ' ' + data[0].mobile_phone;
	}
});
Конечно я уже слегка преобразовал, изначальную версию найти не могу. Хотелось бы подробнее узнать про функцию которая там создаётся. Но ничего не нашёл про это нигде. Это единственный способ создавать функции в Object? Может есть какие-то нюансы использования? Где про это глянуть?


Последний раз редактировалось iNils; 13.05.2010 в 06:49.
Старый 12.05.2010, 21:46
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Пожалуйста, можно и так:
Код AS3:
var myObject:Object = new Object();
 
myObject.funct = function():void
{
	trace( "lalala" );
}
 
myObject.funct();
А можно и вот так:
Код AS3:
var myObject:Object = new Object();
myObject.funct = _funct;
myObject.funct();
 
function _funct():void
{
	trace( "lalala" );
}
Только зачем вам функции в Объекте создавать? Рекоммендую создать простой класс с публичной переменной и методом. И работать быстрее будет и сами не запутаетесь

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
При встрече с автором сего шедевра сделайте ему что-нибудь нехорошее, например пните ногой, или плюньте в лицо. Это ж такую редкосную гадость надо было написать... (а еще для таких вещей есть замечательный сайт - govnokod.ru)
Называется это умными словами "анонимная функция присвоеная свойству динамического объекта" - чем это чревато:
- отсутствие нормальной проверки на этапе компиляции.
- такие функции будут создаваться по-новой при каждом выполнении функции-обертки.
- контекст такой функции можно переопределить в рантайме.
- такие функции плохо перевариваются JIT компилятором, если вообще перевариваются.
- судя по названию, ее еще и планировалось передать в качестве обработчика какого-то события, а это добавляет ко всему вышеперечисленному проблемы с очисткой памяти.
__________________
Hell is the possibility of sanity

Старый 12.05.2010, 21:48
XDiaBLo вне форума Посмотреть профиль Отправить личное сообщение для XDiaBLo Найти все сообщения от XDiaBLo
  № 4  
Ответить с цитированием
XDiaBLo

Регистрация: Mar 2010
Сообщений: 51
Я пока изучаю исходник чата, и экспериментирую в отдельном проекте, удалось имя, фамилию и номер мобилы получить для начала. А поскольку там такое сплошь и рядом, хотелось бы понять принципы. Устал искать описание, и уже готов довольстоваться малым. Спасибо и на этом

Добавлено через 2 минуты
Оригинал нашёл
Код AS3:
        _data_provider.request(DataProvider.GET_USER_INFO,
		{
            onComplete: function(data) 
			{
                self._user_info.user_id = data.user_id; 
                self._user_info.user_name = data.user_name;
 
                // Make next request after 500 ms delay because of API restriction (3 reqsts per second)
                setTimeout(function()
				{
                    self._data_provider.request(DataProvider.GET_SERVER_TIME, 
					{
                        onComplete: function(data) 
						{
                            var current_time = (new Date()).getTime();
                            self._time_offset = current_time - parseInt(data) * 1000;
                            dispatchEvent(new DataAccessEvent(DataAccessor.INIT));
                        }
                    });
                }, 500);
            }
        });

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если сами не запостите в *****код, то я с радостью это сделаю с вашего позволения, страна должна знать своих героев.
__________________
Hell is the possibility of sanity

Старый 12.05.2010, 21:55
XDiaBLo вне форума Посмотреть профиль Отправить личное сообщение для XDiaBLo Найти все сообщения от XDiaBLo
  № 6  
Ответить с цитированием
XDiaBLo

Регистрация: Mar 2010
Сообщений: 51
Цитата:
Сообщение от wvxvw Посмотреть сообщение
При встрече с автором сего шедевра сделайте ему что-нибудь нехорошее, например пните ногой, или плюньте в лицо. Это ж такую редкосную гадость надо было написать... (а еще для таких вещей есть замечательный сайт - govnokod.ru)
Называется это умными словами "анонимная функция присвоеная свойству динамического объекта" - чем это чревато:
- отсутствие нормальной проверки на этапе компиляции.
- такие функции будут создаваться по-новой при каждом выполнении функции-обертки.
- контекст такой функции можно переопределить в рантайме.
- такие функции плохо перевариваются JIT компилятором, если вообще перевариваются.
- судя по названию, ее еще и планировалось передать в качестве обработчика какого-то события, а это добавляет ко всему вышеперечисленному проблемы с очисткой памяти.
Ну да, там дальше есть такой код
Код AS3:
      loader.addEventListener(Event.COMPLETE, function(e:Event){
        var loader:URLLoader = URLLoader(e.target);
        var data = JSON.decode(loader.data);
        if (data.error) {
          options.onError(data.error);
        } else if (options.onComplete && data.response) {
          options.onComplete(data.response);
        }
      });
Насколько я понимаю, это замыкание (closure). Возможно это сделано с целью уменьшения количества классов в программе-примере, но это её ни капли не упрощает для новичка в ЭкшнСкрипте. Попробую разобраться как это всё переделать.

Добавлено через 5 минут
Не, ну можете постить, но там весь исходник чата такой, у меня волосы дыбом, но понемногу разбираюсь. Похоже сделано чтобы отпугивать новичков от написания приложений для вконтакта )) Сам пару месяцев боялся подступиться, смотрел на код, и выключал через 10 минут. Сейчас перешёл в решительное наступление. Что-то начало получаться, методом тыка. Но хочется каждую непонятную ситуацию выяснить, чтобы набраться знаний и опыта. Прежде чем сюда задавать вопрос, прошерстил несколько книг на предмет такой темы, и погуглил, информации нашёл маловато. Даже здесь я уже больше узнал, в этой теме. Спасибо.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Класс занимает ничтожно мало места по сравнению с тем, сколько это ***** отъест потом места в памяти, если вообще не поломается до того, как достигнет критических размеров. Тут на лицо человек, который никогда в жизни на AS3 ничего не писал, а делал каие-нибудь *****сайты на яваскрипте (и возможно немного PHP). Конечно, обстоятельства могут быть разными, и если это код начинающего / любителя, за который никто не платил и т.д. - то, ну, как бы и ладно, но если за это кто-то хоть копейку заплатил - то оно того явно не стоило
Рефакторить - ну, в первую очередь вытащить все функции из других функций и сделать их методами класса, включить strict mode + все предупреждения и исправлять то, что компилятор найдет...

PS. Замыкание в ОО языках не имеет никакого смысла. Для того, чтобы оно имело практический смысл, нужен другой подход и другое окружение... Тут нет никаких возможных скрытых причин и оправданий, просто откровенное ***** в чистом виде.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 12.05.2010 в 22:10.
Старый 12.05.2010, 22:10
XDiaBLo вне форума Посмотреть профиль Отправить личное сообщение для XDiaBLo Найти все сообщения от XDiaBLo
  № 8  
Ответить с цитированием
XDiaBLo

Регистрация: Mar 2010
Сообщений: 51
Оно лежит Вконтакте, в группе "ВКонтакте API ", как один из образцов
Цитата:
Примеры реализованных приложений
В целях ознакомления мы подготовили для Вас исходные коды нескольких базовых приложений:

* Аудиозаписи – пример реализации сервиса аудиозаписей для пользователей ВКонтакте. Скачать »
* Чат – пример реализации чата для пользователей ВКонтакте. Скачать »
* Города – пример реализации приложения, записывающего данные пользователя. Скачать »
* Тетрис – пример реализации игры, записывающей рейтинг. Скачать »
Я думал я ещё совсем плох в ЭкшнСкрипте, раз ничего не понимаю в этом коде.

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

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

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

Регистрация: Mar 2010
Сообщений: 51
Цитата:
Сообщение от wvxvw Посмотреть сообщение
PS. Замыкание в ОО языках не имеет никакого смысла. Для того, чтобы оно имело практический смысл, нужен другой подход и другое окружение... Тут нет никаких возможных скрытых причин и оправданий, просто откровенное ***** в чистом виде.
Возможно вы имеете в виду функциональные языки?

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

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

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


 


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


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