Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Function#apply, Function#call (http://www.flasher.ru/forum/showthread.php?t=147709)

Psycho Tiger 11.12.2010 22:05

Function#apply, Function#call
 
Добрый день, я просто уточнить.
Во первых, вся разница между call и apply заключается только в передаче массива или неограниченного числа параметров (т.е. в задании argArray)?
Во вторых, в случае применения call или apply к методу имеет ли вообще какой-нибудь смысл первый аргумент — thisArg? (объект, к которому применяется данный метод).

Спасибо.

terbooter 11.12.2010 22:59

thisArg - это тот объект, который будет подставляться вместо this внутри вызываемой функции,
так что смысл он имеет, да.

Psycho Tiger 11.12.2010 23:02

Ну я написал "методов". Про функции я вкурсе )
Для методов имеет смысл?

terbooter 11.12.2010 23:04

Похоже, что нет (а ведь это та самая дока =))

Psycho Tiger 11.12.2010 23:19

Да, тоже читал. Просто смущает что функции оставили просто ради старпёров по большей части (ну или чтобы экма следовать, не знаю тут) сделав почти бесполезный параметр. Главное всегда уточнять )

А что с вторыми и далее аргументами про разницу между call и apply? Я всё верно понимаю?

P.S. надо бы с тобой уыпить как нибудь, земляк всё же)

alatar 12.12.2010 01:07

Про thisObject в вызовах методов вполне однозначно расписано в доках. Метод всегда привязан с своему классу. Можно конечно и извратиться:
Код AS3:

public var fakeMethod:Function = function(param:Number)(trace(param)};

Получится "как бы метод" без привязки к классу.
Цитата:

А что с вторыми и далее аргументами про разницу между call и apply? Я всё верно понимаю?
Верно. В apply передается массив, в call параметры.

Aquahawk 12.12.2010 03:20

http://www.flasher.ru/forum/showthread.php?t=147231 в этой ветке я поднимал похожий вопрос, может найжешь там что полезное. Похоже в случае метода thisarg просто игнорится.

Psycho Tiger 12.12.2010 14:08

Цитата:

Получится "как бы метод" без привязки к классу.
Получится как бы функция в публичном поле.
Цитата:

call () метод
AS3 function call(thisObject:Object, parameter1:String = null):void

Язык версии : ActionScript 3.0
Версии среды выполнения: 1.0 9

Вызывает функцию, представленную объектом Function. Каждая функция в ActionScript представлена объектом Function, и все функции поддерживают этот метод.

Почти всегда вместо этого метода можно прибегнуть к оператору вызова функции (()). Оператор вызова функции создает краткий и легко читаемый код. Этот метод полезен, в основном, тогда, когда параметр thisObject вызова функции необходимо контролировать явным образом. Обычно если функция вызывается как метод объекта, находящегося в теле функции, параметру thisObject присваивается значение myObject, как показано в следующем примере:

myObject.myMethod(1, 2, 3);


В некоторых ситуациях может потребоваться, чтобы thisObject указывал на другой объект (например, если функцию необходимо вызвать как метод объекта, но на самом деле она не сохраняется как метод этого объекта):

myObject.myMethod.call(myOtherObject, 1, 2, 3);


Чтобы вызвать функцию в качестве регулярной функции, а не метода объекта, можно присвоить значение null параметру thisObject. Например, эквивалентны следующие вызовы функции:

Math.sin(Math.PI / 4)
Math.sin.call(null, Math.PI / 4)


Возвращает значение, которое вызванная функция указывает в качестве возвращаемого значения.

Параметры
thisObject:Object — Объект, указывающий значение thisObject в теле функции.

parameter1:String (default = null) — Параметр, передаваемый функции. Можно указать 0 или несколько параметров.
Мне вот неоднозначно. Имеет ли смысловую нагрузку thisArg в случае методов? Во всех источниках нигде четко не написано - "да знаете, нагрузки не несёт, для методов смысла не имеет". И мне всё таки интересно знать - это что то вроде willTrigger`а в EventDispatcher или я что-то не понимаю.

fljot 12.12.2010 14:52

http://jacksondunstan.com/articles/912

alatar 12.12.2010 14:54

Цитата:

Получится как бы функция в публичном поле.
Поэтому я и написал в кавычках.
Цитата:

Мне вот неоднозначно. Имеет ли смысловую нагрузку thisArg в случае методов?
В доках прямо написано:
Цитата:

В рамках связанного метода ключевое слово this указывает на исходный объект, реализовавший этот метод.
Что здесь неоднозначного?


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

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