我一直在尝试使用JSDoc记录以下代码:
/**
* @module person
*/
/**
* A human being.
* @class
* @param {string} name
*/
function Person(name){
this.name = name
}
Person.prototype = new function(){
var amount_of_limbs = 4;
/**
* Introduce yourself
*/
this.greet = function(){
alert("Hello, my name is " + this.name + " and I have " + amount_of_limbs + " limbs");
}
}
但是在生成的JSDoc文档中找不到方法greet
。我做错了什么?
答案 0 :(得分:12)
不要添加这样的原型成员。这很奇怪/坏/错。
您正在设置现有对象的整个prototype
,而不是向其添加成员。 将导致性能问题,JS引擎优化问题和意外行为。
如果您需要覆盖原型,则应使用Object.setPrototypeOf()
方法。即使它是一种原生方法,仍然不推荐使用。
如果您唯一的问题是"隐藏" 某些私有常量,您可以选择以下选项:
/**
* A human being.
* @class
*/
var Person = (function () {
// private variables
var amountOfLimbs = 4;
/**
* Initializes a new instance of Person.
* @constructs Person
* @param {string} name
*/
function Person(name) {
/**
* Name of the person.
* @name Person#name
* @type {String}
*/
this.name = name
}
/**
* Introduce yourself
* @name Person#greet
* @function
*/
Person.prototype.greet = function () {
alert("Hello, my name is " + this.name + " and I have " + amountOfLimbs + " limbs");
};
return Person;
})();
_
前缀,并使用JSDoc @private
标记。/**
* Person class.
* @class
*/
function Person(name) {
/**
* Name of the person.
* @name Person#name
* @type {String}
*/
this.name = name
/**
* Amount of limbs.
* @private
*/
this._amountOfLimbs = 4;
}
/**
* Introduce yourself.
* @name Person#greet
* @function
*/
Person.prototype.greet = function () {
alert("Hello, my name is " + this.name + " and I have " + this._amountOfLimbs + " limbs");
};
答案 1 :(得分:1)
根据https://github.com/jsdoc3/jsdoc/issues/596,正确的答案是:使用@memberof
/**
* A human being.
* @class
* @constructor
* @param {string} name
*/
function Person(name) { /*...*/ }
Person.prototype = {};
Person.prototype.constructor = Person;
/**
* Perform a greeting.
* @memberof Person
*/
Person.prototype.greet = function () { /*...*/ }
答案 2 :(得分:0)
对于原型我认为你只是在寻找@inheritdoc - http://usejsdoc.org/tags-inheritdoc.html 或@ augments / @ extends - http://usejsdoc.org/tags-augments.html
我不确定Onur的例子是正确使用原型。根据我的理解,该示例每次都会创建一个新的原型实例而不是链接到同一个实例,因此您在使用它们时并没有真正受益。如果您正在寻找能够在该mannor中运行的代码,那么直接的工厂或建筑功能将很好地完成工作。
Perosnally我喜欢构造函数方法,如下所示,您可能更喜欢工厂函数语法,但现在可能会受到更多关注。
/**
* A human being.
* @constructor
*/
var person = function(name){
// private variables
var amount_of_limbs = 4;
// public members
this.name = name;
/**
* Introduce yourself
*/
this.greet = function () {
console.log("name is: "+this.name+" I have "+amount_of_limbs+" limbs");
}.bind(this);
return this;
};
var me = person.call({},'Michael');
me.greet(); //"name is: Michael I have 4 limbs"/
var you = person.call({},'Kuba');
you.greet(); //"name is: Kuba I have 4 limbs"/
<强>最后; 强> 我不认为我可以在这里发表评论而不提Kyle Simpsons OLOO模式。这是一个原型委托模式,您可能更喜欢传统的原型语法。他的“你不懂JS”系列和博客还有更多内容。
答案 3 :(得分:0)
您可以使用// url and dbtable are required
val options:JDBCOptions = new JDBCOptions(Map("url" -> "JDBCUrl", "dbtable" -> "foo"))
。
@lends
这是一个稍微修改过的版本。但结果是一样的。您有一个原型的单独范围。
来自here。
答案 4 :(得分:-3)
事实证明我需要使用@alias
关键字。 http://usejsdoc.org/tags-alias.html