В чем разница между вызовом exampleFunction () и exampleFunction.call ()? - PullRequest
2 голосов
/ 27 января 2012

В чем разница между вызовом exampleFunction () и exampleFunction.call () ? В Actionscript есть функция, которая позволяет вам использовать функции через метод call. Например, чтобы использовать функцию «test» ниже, я мог бы написать test () и test.call ()

function test():void {
 trace('function was called')
}

В чем разница?

Ответы [ 3 ]

12 голосов
/ 27 января 2012

Как и в ECMAScript (из которого происходит AS), он позволяет указывать контекст "this" через первый параметр.

См. Документацию Function.call . Обратите внимание на замечания о функциях и методах & ndash; или «связанные функции» & ndash; и примеры.

То есть дано:

function f ():* { return this; }
var x:Object = {f: f};

Тогда:

И f.call(x), и x.f() оцениваются как x, тогда как f() не имеет, поскольку имеет другое "this" (вместо этого оно оценивается Global).

Если используется f.call() (без параметров), тогда «this» будет NaN, тогда как f(), как указано выше, имеет Global как «this». Попробуйте использовать trace(this) в тестовом коде, поскольку это даст более полезную контекстную информацию.

Удачного кодирования.

2 голосов
/ 27 января 2012

Обратите внимание, что метод .call () кажется примерно в 10 раз медленнее, согласно этому исследованию Джексона Данстана: http://jacksondunstan.com/articles/912

1 голос
/ 27 января 2012

Практическое различие возникает, когда вы передаете функции и хотите использовать их динамически, хотя для этого чаще всего применяется apply (), поскольку он позволяет вам более динамично составлять список аргументов.

Проверьте эту статью для получения дополнительной информации о некоторых ситуациях, когда вы можете использовать эти методы http://www.developria.com/2010/12/functional-actionscript-part-1.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...