描述: 将一个字面量对象的所有属性标记为某个标识符(类或模块)的成员。
@lends <namepath>
@lends
标签允许你将一个字面量对象的所有成员标记为某个标识符(类或模块)的成员,就像他们是给定名称的标识符成员。你可能想这样做,如果你传递一个对象字面量给一个函数,创建一个成员为对象字面量的命名类。
在这个例子中,我们要使用一个辅助函数创建一个名为"Person"的类,以及名为"initialize" 和 "say"的实例方法。类似于一些流行框架创建类的方式。
例如,给makeClass
函数传入一个对象字面量,此对象字面量将会成为类Person
的成员:
// We want to document this as being a class
var Person = makeClass(
// We want to document these as being methods
{
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + " says: " + message;
}
}
);
没有任何意见,JSDoc将无法识别该代码创建的一个Person
类有两个方法。为了将他们正确文档化,我们需要在对象字面量紧邻的上方书写"@lends"的标签。@lends
标签告诉JSDoc,这一对象字面量的所有成员都会被“借”给"Person"类。
下面的例子更加接近我们想要的,例如,描述静态方法:
/** @class */
var Person = makeClass(
/** @lends Person */
{
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + " says: " + message;
}
}
);
现在名为"initialize"和"say"的函数会被文档化,但它们被标记为"Person" 类的静态方法。这可能是你的意思,但有种情况下我们想要"initialize"和"say"属于"Person"类的实例。所以,我们通过少做改动,使其成为原型的方法。
例如,标注实例方法:
/** @class */
var Person = makeClass(
/** @lends Person.prototype */
{
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + " says: " + message;
}
}
);
最后一个步骤:我们类框架使用借来的"initialize"函数来构建Person
类的实例,但一个Person实例不具有自己的"initialize"方法。该解决方案是将@constructs标签添加到借出去的函数上。请记住最好删除@class标签,否则两个类将被文档化。
例如,通过 constructor 文档化:
var Person = makeClass(
/** @lends Person.prototype */
{
/** @constructs */
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + " says: " + message;
}
}
);