Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   передача параметра функции, при нажатии на мувик (http://www.flasher.ru/forum/showthread.php?t=88689)

artcraft 29.11.2006 02:03

и потом, это не мой метод... это не я изобрёл так делать... :~)

etc 29.11.2006 02:12

Ну раз про него, то опять же, переместить назначение onPress в другое место нельзя, ссылку убить нельзя и т.п. В общем — не вариант.

artcraft 29.11.2006 02:16

почему нельзя?
Код:

delete(mc.onPress);
mc.onPress=otherFunction;


iNils 29.11.2006 02:16

Цитата:

Сообщение от 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])


etc 29.11.2006 02:27

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

artcraft 29.11.2006 02:28

:~)
ну это и коню понятно что можно всё в один столбик написать без всяких импортов....

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

artcraft 29.11.2006 02:29

Цитата:

Сообщение от __etc
нельзя убивать вспомгательную ссылку, а вместе с этим и перенести всю функцию куда-нибудь ещё…

это как?
что такое вспомогательная ссылка?
как это сделать правильным способом?

artcraft 29.11.2006 02:39

а... дошло (плохо башка варит к ночи) вспомогательня ссылка это:
Код:

var self:Object = this;
так а зачем её удалять - она что много памяти съедает? кому они мешает?

etc 29.11.2006 02:42

Да никак — юзать Delegate/Proxy и не мучаться.


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

artcraft 29.11.2006 03:09

и куда её еще переносить?
для привязывания функции любым из методов нужна ссылка на функцию и ссылка на то что будет для неё 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 (хотя, безусловно нас это не волнует т.к. это менее важно чем читаемость кода)

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

пока не вижу критических различий :umnik2:
только чистоплюйство...


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

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