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

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

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

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
и потом, это не мой метод... это не я изобрёл так делать... :~)
__________________
Хороший отдых - половина работы.

Старый 29.11.2006, 02:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 22  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Ну раз про него, то опять же, переместить назначение onPress в другое место нельзя, ссылку убить нельзя и т.п. В общем — не вариант.

Старый 29.11.2006, 02:16
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 23  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
почему нельзя?
Код:
delete(mc.onPress);
mc.onPress=otherFunction;
__________________
Хороший отдых - половина работы.

Старый 29.11.2006, 02:16
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 24  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от artcraft
точно такого результат можно добиться не импортируя никаких классов...
Код:
function createDelegate (obj:Object, func:Function, arg:Array):Function {
	var f = function () {
		var target = arguments.callee.target;
		var func = arguments.callee.func;
		var arg = arguments.callee.arg;
		return func.apply (target, arg);
	};
	f.target = obj;
	f.func = func;
	f.arg = arg;
	return f;
}
function func () {
	trace (arguments);
}
var mc:MovieClip = this.createEmptyMovieClip ('mc', 1);
with (mc) {
	beginFill (0xFF3366);
	lineTo (100, 0);
	lineTo (100, 100);
	lineTo (0, 100);
	lineTo (0, 0);
	endFill ();
}
var self:Object = this;
mc.onPress = createDelegate (this, func, [mc,2])
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 29.11.2006, 02:27
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 25  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
artcraft, я имел ввиду, что нельзя убивать вспомгательную ссылку, а вместе с этим и перенести всю функцию куда-нибудь ещё…

Старый 29.11.2006, 02:28
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 26  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
:~)
ну это и коню понятно что можно всё в один столбик написать без всяких импортов....

не в этом вопрос - вопрос:
в чём конкретно проблема области видимости, "кривого" cпособа?
до меня не доходит - чем он хуже?
__________________
Хороший отдых - половина работы.

Старый 29.11.2006, 02:29
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 27  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
Цитата:
Сообщение от __etc
нельзя убивать вспомгательную ссылку, а вместе с этим и перенести всю функцию куда-нибудь ещё…
это как?
что такое вспомогательная ссылка?
как это сделать правильным способом?
__________________
Хороший отдых - половина работы.

Старый 29.11.2006, 02:39
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 28  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
а... дошло (плохо башка варит к ночи) вспомогательня ссылка это:
Код:
var self:Object = this;
так а зачем её удалять - она что много памяти съедает? кому они мешает?
__________________
Хороший отдых - половина работы.

Старый 29.11.2006, 02:42
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 29  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Да никак — юзать Delegate/Proxy и не мучаться.


Проблема «кривого» способа в том, что внутри вспомгательной функции this ссылается вовсе не на то, что нам нужно, поэтому и создается лишний мусор, вроде self.

Старый 29.11.2006, 03:09
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 30  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
и куда её еще переносить?
для привязывания функции любым из методов нужна ссылка на функцию и ссылка на то что будет для неё this-ом

Код:
var target:Object = this;
mc.onPress = function(){target.func(params);}
Код:
function createDelegate (obj:Object, func:Function, arg:Array):Function {
	var f = function () {
		var target = arguments.callee.target;
		var func = arguments.callee.func;
		var arg = arguments.callee.arg;
		return func.apply (target, arg);
	};
	f.target = obj;
	f.func = func;
	f.arg = arg;
	return f;
}
mc.onPress = createDelegate (this, func, params);
----
при "плохом" методе мы имеем болше символов и 2-е строки
да согласен "правилный" метод нагляднее, но реально кода больше см. коммент#24 (хотя, безусловно нас это не волнует т.к. это менее важно чем читаемость кода)

то что находится внутри вспомогательной функции не важно - туда ничего добавлять и не надо... потому она и вспомогательная.
"правильный" способ - это ведь тоже вспомогательная функция, там ведь никто не стремится ничего менять...

пока не вижу критических различий
только чистоплюйство...
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 29.11.2006 в 03:28.
Создать новую тему Ответ Часовой пояс GMT +4, время: 04:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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