AS3, зная, сколько аргументов принимает функция - PullRequest
4 голосов
/ 24 ноября 2011

Есть ли способ узнать, сколько аргументов может принимать экземпляр Function во Flash?Также было бы очень полезно узнать, являются ли эти аргументы необязательными или нет.

Например:

public function foo() : void                               //would have 0 arguments
public function bar(arg1 : Boolean, arg2 : int) : void     //would have 2 arguments
public function jad(arg1 : Boolean, arg2 : int = 0) : void //would have 2 arguments with 1 being optional

Спасибо

1 Ответ

13 голосов
/ 24 ноября 2011

Да, есть: используйте свойство Function.length. Я только что проверил документы : там, похоже, ничего не упоминается.

trace(foo.length); //0
trace(bar.length); //2
trace(jad.length); //2

Обратите внимание, что после имени функции нет фигурных скобок (). Вам нужна ссылка на объект Function; добавление фигурных скобок выполнит функцию.

Я не знаю, как установить, что один из аргументов является необязательным.

EDIT

А как насчет ... остальных параметров ?

function foo(...rest) {}
function bar(parameter0, parameter1, ...rest) {}

trace(foo.length); //0
trace(bar.length); //2

Это имеет смысл, поскольку нет способа узнать, сколько аргументов будет передано. Обратите внимание, что в теле функции вы можете точно знать, сколько аргументов было передано, например:

function foo(...rest) {
    trace(rest.length);
}

Спасибо @felipemaia за указание на это.

...