2017-01-19 4 views
2

Как вы проверяете, нужна ли функция в JavaScript для аргументов?Как проверить, требует ли функция аргументов?

function functionWithArgs(arg1, arg2) {...} 

function functionWithoutArgs() { /* I will return a function here */ } 

Я, если приезд функция имеет какие-либо параметры через ES7 декораторов, так что я не знаю имя функции при проверке их.

Внутри декоратора

// If the function has arguments, use descriptor.value without invoking it 
if (descriptor.value.HAS_ARGUMENTS) descriptor.value; 

// If the function has no arguments, invoke it as it will return a function with arguments 
else descriptor.value(); 

Хотя я использую ES7 декораторов, этот вопрос должен быть в состоянии ответить без каких-либо знаний ES7.

UPDATE: Я знаю, что я могу сделать что-то вроде if (descriptor.value() === 'undefined'), чтобы определить, возвращает ли функция любое значение, но это не всегда может быть дело в возвращаемой функции.

+0

Просто для справки нет такого понятия, как ES7 декораторов. Спецификация ES2016 (ES7) уже завершена, а декораторы по-прежнему представляют собой всего лишь предложение [stage-2] (https://github.com/tc39/proposal-decorators). –

+0

И вы не можете знать, нужны ли функции * для аргументов *; просто ли он может их принять. – Utkanos

+0

@DanPrince Я не упомянул, что на самом деле я использую TypeScript, но я не хотел классифицировать это как вопрос TypeScript для охвата более широкой аудитории. И ответ от Нины позволил мне использовать его. – borislemke

ответ

3

Вы можете проверить свойство функции length.

length является свойством объекта-функции, и указывает, сколько аргументов функция ожидает, т.е. числа формальных параметров. Это число исключает rest parameter и включает только параметры до первого значения со значением по умолчанию. В отличие от этого, arguments.length является локальным для функции и предоставляет количество аргументов, фактически переданных функции.

function functionWithArgs(arg1, arg2) {} 
 
function functionWithoutArgs() {} 
 

 
console.log(functionWithArgs.length); // 2 
 
console.log(functionWithoutArgs.length); // 0

+0

Спасибо! Это сделало это для меня :) Примите это через 8 минут. Это основной материал, который должен знать программист, который написал JavaScript в течение 3 лет? D: – borislemke

+0

@ TânNguyễn Я проверил это с параметрами отдыха, и он действительно показывает 0 как длину. Хотя использование параметров останова никогда не будет так, когда я буду использовать декоратор, это может быть полезно для других. Я буду ждать, если у кого-нибудь еще будет лучший ответ, прежде чем принять это. соз – borislemke

Смежные вопросы