Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   thisArg в call() - чудо-параметр (http://www.flasher.ru/forum/showthread.php?t=188184)

AlexLucas 29.11.2012 20:58

thisArg в call() - чудо-параметр
 
Ещё раз доброго времени суток.
В хелпе написано что у call() первый параметр это thisArg, у которого есть значение по умолчанию - NaN. Но если я использую call(), то он вообще не учитывает thisArg
Код AS3:

private function f1(arg1:*, arg2:*, arg3:* = null):void {
                        trace(arg1 + ' ' + arg2 + ' ' + arg3);
                }
 
//......
f1.call(null, 'asdasd', null);

Код:

asdasd null null
Что бы мы не задали для thisArg, в случаях bounded methods он задаст ему this, но как это так что я могу после необязательного параметра задавать обязательные, но кроме того call() вообще не учитывает thisArg при вызове. Либо я где-то очень (очень) сильно ошибаюсь, либо call() особенный :)
Объясните или дайте что почитать.
Заранее спасибо за разъяснения.

Inet_PC 29.11.2012 22:00

в thisArg передается объект который будет использовать в функции как this. Но так как у Вас f1 это метод класс, то так просто изменить this не получится. Единственное где можно изменить this это в анонимной функции:
Код AS3:

package
{
        import flash.display.Sprite;
 
        public class Test extends Sprite
        {
                public function Test()
                {
                        super();
                        function func():void
                        {
                                trace(this);
                        }
                        func();//[object global]
                        var f:Function = func;
                        f.call(new Sprite()); // [object Sprite]
                }
        }
}


Psycho Tiger 29.11.2012 22:51

Моу.

AlexLucas 29.11.2012 23:19

Я в курсе кто такой thisArg, я спрашиваю
Цитата:

как это так что я могу после необязательного параметра задавать обязательные, но кроме того call() вообще не учитывает thisArg при вызове
call() это метод класса Function, почему у него такие свойства? Насколько я знаю обязательные аргументы нельзя указывать после аргументов необязательных (с умолчательными значениями), ну и при вызове call() не учитывается параметр thisArg, как я показал в примере.

Krusty 30.11.2012 01:06

Цитата:

Сообщение от AlexLucas (Сообщение 1106941)
Я в курсе кто такой thisArg, я спрашиваю
call() это метод класса Function, почему у него такие свойства? Насколько я знаю обязательные аргументы нельзя указывать после аргументов необязательных (с умолчательными значениями), ну и при вызове call() не учитывается параметр thisArg, как я показал в примере.

Думаю, виноват стандарт языка ECMA. Для js эта функциональность крайне важна(this зависит от контекста вызова), для as3 - не особо.

dimarik 30.11.2012 01:27

Цитата:

Сообщение от AlexLucas (Сообщение 1106928)
Ещё раз доброго времени суток.
В хелпе написано что у call() первый параметр это thisArg, у которого есть значение по умолчанию - NaN.

Что бы мы не задали для thisArg, в случаях bounded methods он задаст ему this, но как это так что я могу после необязательного параметра задавать обязательные

Если вы внимательно ходили по вашей ссылке, то должны были увидеть, что этот параметр очень даже обязателен. Значения по умолчанию у него нет. NaN при большом желании можно в него передать, раз он принимает тип *. Следовательно, если этот параметр обязательный, то следующие параметры могут быть в т.ч. обязательными. Но он вроде как не учитывается при вызовах методов экземпляров. Работает только для созданных в рантайме Function.

AlexLucas 30.11.2012 02:36

Интересно.
В as3 если при вызове не задать функции всех обязательных параметров (поменять сигнатуру), то выдаст ошибку, тогда как (если я не ошибаюсь) в Си можно создать две функции с тем же именем, но с разными аргументами, и это будут две разные функции, что есть очень удобно.
По-моему call() ведёт себя похоже, раз не учитывается параметр, то есть как бы две разные функции - для bounded и unbounded методов с тем же именем?
Возможно ли запилить свой такой метод (2 метода с тем же именем) ?

Inet_PC 30.11.2012 09:44

Цитата:

тогда как (если я не ошибаюсь) в Си можно создать две функции с тем же именем, но с разными аргументами, и это будут две разные функции, что есть очень удобно.
Это называется перегрузка
Цитата:

По-моему call() ведёт себя похоже
Нет.
Цитата:

раз не учитывается параметр
Все параметры учитываются.
Цитата:

Возможно ли запилить свой такой метод (2 метода с тем же именем) ?
Нет.


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

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