Форум 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)
-   -   Function.apply vs. Function.call (http://www.flasher.ru/forum/showthread.php?t=98534)

this.create 15.07.2007 20:53

iNils: Тема образовалась из обсуждения темы Проблема с кодом

Kikasso
А вызов через apply не считается теперь нехорошей практикой? Как eval.

silin 15.07.2007 21:04

this.create, а че? давай новую новую тему замути.., про понятия в AS..,выступи с заявлением.., перетрем..
а здесь-то ты где apply /eval углядел, в недрах Tween (еще где?), так не к месту базар..

Kikasso 15.07.2007 21:16

Цитата:

Сообщение от this.create
Kikasso
А вызов через apply не считается теперь нехорошей практикой? Как eval.

Да-да, а ты в классы загляни. В тот же Delegate.
silin, я там применил. Кошмар.

iNils 15.07.2007 21:34

У eval и apply разная природа. Eval - директива компилятору и в конечный байткод не попадает.

silin 15.07.2007 21:35

:)
ни eval ни, тем более apply в числе deprecated не значатся..
другое дело, удобно/нужно ли ими пользоваться..
eval ни разу не понадобился, а вот без apply/call не знаю как..

надо съезжать во флейм или другую тему, а то чел спросил как ему с кнопками разобраться, а тут ..

iNils 15.07.2007 21:44

Без apply тяжело, а call я не знаю, где можно применить.

Kikasso 15.07.2007 21:57

Цитата:

Сообщение от iNils
У eval и apply разная природа. Eval - директива компилятору и в конечный байткод не попадает.

не попадает?
Код:


txt = createTextField('txt', 0, 210, 5, 200, 20);
txt.border = true;
txt.type = 'input';
mc = createRect('mc', 10);
mc1 = createRect('mc1', 110 );
mc.onPress = function(){
 txt.text = this;
}
mc1.onPress = function(){
 txt.text = eval(txt.text)._x;
}
function createRect(id, x){
 var mc = createEmptyMovieClip(id, getNextHighestDepth());
 with(mc){
  beginFill(0, 100);
  lineTo(90,0); lineTo(90,30); lineTo(0,30); lineTo(0,0);
  endFill();
  }
 mc._x = x;
 return mc;
}

Можно например ввести _level0.mc1 или _root.txt
Цитата:

Сообщение от iNils
Без apply тяжело, а call я не знаю, где можно применить.

Если значение вдруг вернуть понадобится..

iNils 15.07.2007 22:34

Цитата:

Сообщение от Kikasso
не попадает?
Можно например ввести _level0.mc1 или _root.txt

Я это знаю, но самого eval в байт коде нет, есть набор инструкций.
Цитата:

Сообщение от Kikasso
Если значение вдруг вернуть понадобится..

Значение можно вернуть и обычным способом, фишка в том, что можно метод одного объекта применить к другому объекту.
Код:

_global.func = function (a, b) {
        trace (this + " " + a + " " + b);
};
func (1, 2);
_root.func (3, 4);
func.call (_root, 5, 6);

Весь вопрос в аргументах. Используя call, мы не можем передать аргументов больше, чам было прописано при его вызове, а вот с apply такое возможно. То есть call урезан в эффективности по сравнению с apply, и поэтому мне просто не понятно, зачем он нужен.

silin 15.07.2007 22:43

а вот и не кому не нужная дискуссия:
apply предает аргументы массивом, а call списком (в смысле перечислением через запятую, не знаю как правильно это называется), что из них более подходит диктует задача..
но спорить я не стану: apply , так apply ..:)

iNils 15.07.2007 22:47

Цитата:

Сообщение от silin
что из них более подходит диктует задача..

Можешь привести пример, когда apply не подходит? Вот пример с call пожалуйста, в Delegate (не родной, а мой) или Proxy, для передачи произвольного числа параметров, call ни как не подходит, ну только если не описать там тупо call (obj, a, b, c, d, e, ...)


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

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