Я пытаюсь документировать старый код с JSDoc3, и я застреваю, пытаясь заставить его включить в документацию параметры к методам экземпляра - или вообще показать что-либо как свойство экземпляра. Я подозреваю, что проблема в том, что код не соответствует ожидаемой идиоме для фальсификации классов в javascript, но я хочу, чтобы все было задокументировано, прежде чем начинать переписывать что-либо. Я пытался сделать небольшой пример проблемы, со структурой фактического кода:jsdoc: Как мне получить параметры метода экземпляра?
/**
* Global function
* @param {Object} v Stuff that they're trying to avoid making global
* @return {Object} Updated v
*/
jsdoc_test = function(v) {
/**
* Some stuff is defined in this namespace
* @namespace space
*/
var space = {};
/**
* Something that acts like a class
* @name space.someclass
* @memberOf space
* @constructor
* @type {function}
* @param {any} y blah blah
* @return {Object} The constructed object
*/
space.someclass = function(w) {
var obj = {
source: w, // might need this again
derived: foo(w), // what we usually need
etc: "etc" // and so on
};
/**
* This should be a member function, but it appears as a static property
* @name space.someclass.methodA
* @memberOf space.someclass
* @type {function}
* @instance
* @param {any} x Parameters do not appear in documentation
* @return {Object} this
*/
obj.methodA = function(x) {
bar(x); // or whatever methodA does
return this;
}
/**
* This should be a member function, but it doesn't show up at all
* @name space.someclass.methodB
* @memberOf space.someclass#
* @type {function}
* @param {any} y Parameters do not appear in documentation
* @return {Object} this
*/
obj.methodB = function(y) {
baz(y); // or whatever methodB does
return this;
}
return obj;
/**
* This should be a member function, but it doesn't show up at all
* @name space.someclass.methodC
* @memberOf space.someclass.prototype
* @type {function}
* @param {any} z Parameters do not appear in documentation
* @return {Object} this
*/
obj.methodC = function(z) {
qux(z); // or whatever methodC does
return this;
}
return obj;
}
// ...
}
Я хочу, чтобы все три метода появляется в сгенерированной документации как методы экземпляра. Как это, methodA
выглядит как статическое свойство, а methodB
и methodC
(которые следуют предложения от here) не появляются на всех
Как получить JSDoc3 документировать методы экземпляра, с их параметрами, без переписывания кода?
Пробовали ли вы документирование 'уаг OBJ = ...' 'через/** @class * /? Таким образом, вы должны иметь возможность правильно ссылаться на него для добавления свойств или для возвращаемого значения. – SGD
Согласно http://usejsdoc.org/tags-class.html, '@ class' является синонимом' @ constructor', который я уже применяю к заводской функции. Замена '@ constructor' на' @ class' и/или перемещение блока комментариев к объекту не влияет на сгенерированную документацию. Класс уже появляется в документации как класс, проблема в том, что методы экземпляра появляются как статические свойства. – ShadSterling
Да, но вы не документируете 'obj'. Мое предложение заключалось в том, чтобы документировать 'obj' внутри функции через' @ class', а затем ссылаться на этот внутренний класс как возвращаемое значение функции. – SGD