我目前正在使用最新版本的Visual Code Studio。我正在尝试使用intellisense来显示工厂函数创建的实例上的方法。这些方法将通过对象组合应用(因此直接作为对象的属性添加)。
所以充当构造函数的函数基本上返回:
function makeWrappedObj() {
var obj = { /* random data */ }; // Then add methods to obj
Object.keys(methods).forEach(key => a[key] = methods[key]; );
return obj;
}
var methods = {
/**
* Yay documentation
* @returns {Object}
*/
method1: function() { return null; }
};
var instance = makeWrappedObj();
instance.method1( // What documentation to show up here
instance. // and here
是基本想法。 Here有人在做类似事情。我会在第三种可能的解决方案中解决这个问题。
1) makeWrappedObj上的@class我认为只有在makeWrappedObj.prototype上附加方法时才有效,这不是我正在做的事情,因此无效。除非我误解了什么。
2) @namespace解决方案
/* @namespace ClassName */
/* @returns {ClassName}
function createWrappedObj() {
var obj = { /* random data */ }; // Then add methods to obj
Object.keys(methods).forEach(key => a[key] = methods[key]; );
return obj;
}
var methods = {
/**
* Currently the soultion I'm using
* @memberof ClassName
* @param {number} a
**/
method1: function (a) {}
};
var instance = makeWrapperObj();
instance.method1( // Only shows documentation here
所以这种作品。这两个问题是:
instance.method(
而不是instance.
的情况下获取文档时才会获得文档 - 并不是什么大不了的事instance.toString(
将阻止您显示的任何文档,并显示本机toString默认文档instaed。
3) @typedef就像上面的链接一样。
/** Can be placed anywhere
* @typedef {ClassName}
* @property {function} method1
* dunno how to document arguments with this method
* but it gets the intellisense menu to pop up for "instance." after dot
*/
/* @returns {ClassName} */
function createdWrappedObject() {
var obj = { /* random data */ }; // Then add methods to obj
Object.keys(methods).forEach(key => a[key] = methods[key]; );
return obj;
}
var methods = {
method1: function (a) {}
};
var instance = makeWrappedObj();
instance. // Yay
instance.method1( // Doesn't work
当一种类型instance.
有一些缺点
注意:我愿意一个接一个地手动分配所有方法,而不是对方法mixin的所有键进行foreach。
另外我不知道如何指定传递的函数的参数。这应该是可能的,因为Array.map(
为其函数调用指定了三个参数。
目标是当有人将其作为带有require的库导入时获取文档,或者只是将其作为库包含在浏览器端脚本中。