2013-02-09 1 views
1

У меня есть функция для удаления обработчиков событий из класса EventEmitter. Это выглядит примерно так:Как записывать функции, которые имеют несколько параметров порядка параметров в JsDoc?

EventEmitter.prototype.remove_handler = function(event_name, handler) { 
    if(arguments.length < 2) { 
     handler = event_name; 
     event_name = null; 
    } 

    // ... 
}; 

Функция может либо вызываться с именем события и обработчика, или просто обработчиком. Если имя события присутствует, обработчик удаляется из этого конкретного события, в противном случае он полностью удаляется из эмитента события.

Как документировать такие сценарии в JsDoc? В этом случае я мог бы просто документировать параметры по мере их появления и отметить, что «event_name может быть опущено, в любом случае (и т. Д.)», Но я, конечно же, могу представить себе сценарии, где это было бы невозможно.

+0

Просто объяснить это в простом тексте в разделе комментариев общего для функции, и объявить параметр, который является необязательным, как таковой. –

+0

@ Mörre: Да, как я сказал в своем вопросе, это работает в этом случае, но как насчет функции с более радикальным разнообразием параметров? Например, функция, которая принимает два * полностью * разных набора аргументов. Вам нужно будет документировать его почти так, как если бы это была две функции, и вам понадобилось бы по крайней мере две строки '@ param' для каждого параметра. Мне нравится эта ситуация. – Hubro

+0

Как я уже сказал, объясните это в разделе комментариев в открытом тексте и оставьте @param, если это усложняет ситуацию. Или действительно ИМЕЮТ две функции. Я не уверен, что бы сказал, что функции, которые имеют совершенно разные варианты аргументов ... Я отложу суждение, пока не увижу конкретный случай, и тогда я буду судить только об этом случае. –

ответ

2

Вы можете использовать @also тег для обеспечения нескольких сигнатур методов:

/** 
* 
* @param {String} event_name 
* @param {Function} handler 
* 
* @also 
* 
* @param {Function} handler 
*/ 
EventEmitter.prototype.remove_handler = function(event_name, handler) {