Javascript 如何记录使用object.create创建的对象,该对象也具有原型方法
我正在努力找出使用jsdoc3和闭包字典实现jsdoc的最佳方法。下面的代码几乎是我想要的文档,但是Javascript 如何记录使用object.create创建的对象,该对象也具有原型方法,javascript,google-closure,jsdoc,jsdoc3,Javascript,Google Closure,Jsdoc,Jsdoc3,我正在努力找出使用jsdoc3和闭包字典实现jsdoc的最佳方法。下面的代码几乎是我想要的文档,但是@class标记在文档中添加了一个新的关键字,而且我也对使用类定义感到不安,因为它不是真正的类 /** *myObject构造函数请勿与new一起使用。 *@class myObject *@param{string}someText要存储的文本 */ 函数myObject(someText){ var instance=Object.create(myObject.prototype); ins
@class
标记在文档中添加了一个新的关键字,而且我也对使用类定义感到不安,因为它不是真正的类
/**
*myObject构造函数请勿与new一起使用。
*@class myObject
*@param{string}someText要存储的文本
*/
函数myObject(someText){
var instance=Object.create(myObject.prototype);
instance.someText=someText;
返回实例;
}
/**
*输出到控制台
*/
myObject.prototype.doSomething=函数(){
console.log(this.someText);
};
var测试=myObject(“foobar”);
试验。剂量测定();
@namespace
最初似乎是一个更好的选择,但它不允许在伪构造函数上记录@param
或类似内容。感谢您的帮助 你想做的事情似乎太复杂了。如果需要构造/返回特定类型的工厂方法,只需将其显式化:
/**
* myObject factory.
* @param {string} someText
* @returns {!myObject} The constructed object.
*/
function createMyObject(someText) {
return new myObject(someText);
}
/*
* @param {string} someText The text to store
* @constructor
*/
function myObject (someText) {
this.someText = someText;
}
/**
* Outputs to the console
*/
myObject.prototype.doSomething = function () {
console.log(this.someText);
};
var test = createMyObject('foobar');
test.doSomething();
这里演示了构造函数/工厂的可能实现,以及如何记录构造对象的成员:
/**
* Constructs my object.
*
* <p>
* It is not necessary to call this with <i>new</i> keyword.
*
* @name myObject
* @namespace
* @constructor
* @param {string} someText The text to store
*/
function myObject ( someText ) {
var instance = Object.create( myObject.prototype, {
/**
* A member, could be a value of any type.
*
* @type {string}
* @memberof myObject#
*/
anyMember: {
value: "whatever"
},
/**
* A <strong>method</strong> member.
*
* @param {string|number|object|function} anArgument A parameter.
*
* @method
* @memberof myObject#
*/
aMethodSpecially: {
value: function ( anArgument ) {
throw "Not yet implemented";
}
}
} );
/**
* Some text.
*
* @property {string}
*/
instance.someText = someText;
return instance;
}
/**
* Outputs to the console.
*
* @param {number|string|function|object} someArgument Some method argument.
* @function doSomething
* @memberof myObject#
*/
myObject.prototype.doSomething = function ( someArgument ) {
// @ts-ignore
console.log( this.someText );
};
var test = myObject( 'foobar' );
test.doSomething();
/**
*构造我的对象。
*
*
*不必用new关键字调用此函数。
*
*@name myObject
*@名称空间
*@constructor
*@param{string}someText要存储的文本
*/
函数myObject(someText){
var instance=Object.create(myObject.prototype{
/**
*成员可以是任何类型的值。
*
*@type{string}
*@memberofmyobject#
*/
任何成员:{
价值观:“随便”
},
/**
*方法成员。
*
*@param{string | number | object | function}参数参数。
*
*@方法
*@memberofmyobject#
*/
特别是:{
值:函数(辩论){
抛出“尚未实施”;
}
}
} );
/**
*一些文本。
*
*@property{string}
*/
instance.someText=someText;
返回实例;
}
/**
*输出到控制台。
*
*@param{number | string | function | object}某个参数某个方法参数。
*@function doSomething
*@memberofmyobject#
*/
myObject.prototype.doSomething=函数(someArgument){
//@ts忽略
console.log(this.someText);
};
var测试=myObject('foobar');
试验。剂量测定();
使用JSDoc 3生成的文档如下所示:
---截图继续
我已经用typedeffed返回类型记录了一个工厂方法,但无法让原型方法在intellisense中显示出来。但我完全错过了@memberof结尾的那一点,所以它现在起作用了。但是在usejsdoc上找不到该哈希的解释。它表示一个实例成员啊,对了,我是盲人,它就在那里:它还说你也可以使用
@memberof something.prototype
而不是@memberof something.