用YUIDoc文档化JavaScript代码

转自i,unbug

什么是YUIDoc?YUIDoc会根据你写的代码注释生成API文档。

YUIDoc是个NodeJS应用,能将你的JS代码中的注释生成HTML格式的API文档。事实上,不仅是JS,任何支持块注释的语言都能使用。

要安装YUIDoc,首先要安装好NodeJS,然后使用 npm -g install yuidocjs 即可安装YUIDoc。通过命令 yuidoc <option> <path to js folder> 来使用。


一切都是关于标签

YUIDoc从源文件的多行注释中抽取到文档内容。当然,你会有些注释不想成为文档的一部分,让YUIDoc知道你的注释是非常重要的,必须以两个*开头。如下:

/**
 * YUIDoc 会认出这个
 */

/*
 * YUIDoc 不会认这个
 */

当然,注释里的内容才是最重要的。每个注释块都应该包含唯一的主标签,和零个或多个副标签。正确的标签加注释即可生成API文档。


主标签

开始讲主标签之前,必须明确一点,每个注释块中能切仅有一个主标签。描述了当前代码块的作用。

@module

@module标签描述了一组关联的类(JS中并不包含类,YUIDoc把构造器归纳成类)。如果我们用YUIDoc生成UDTWO的文档,那UDTWO对象就是个module,因为他同时管理Model、Collection、View和其他类。标签后面跟着写@module的名称:

/**
 * @module UDTWO
 */
var UDTWO = {};

@class

@class标签专门描述类的。在YUI库中通常是个构造函数。每个有@class标签的注释块都应该有一个@static或者@constructor的副标签。

/**
 * @class Model
 */
function Model(){
    //...  
}

如果你的类是Model的一部分,那么不必在@class注释里指明与module的关系,只要文件的顶部有@module的注释即可。

@method

@method描述类的方法。你将会用到@return和@params副标签加以说明。

@property

@property标签说明类的属性值。@type和@default副标签配合使用。

@event

@event描述自定义的可触发事件。YUIDoc文档里指出:@event注释块近似于@method,但无需@return,@param则用于说明回调方法接受的参数。


 

副标签

注释块可以有多个副标签,通常同时有几个并且有些类型相同,下面介绍些比较常用的副标签:

@submodule

如果你的module分为多个(可能在同意文件中,可能不在),@submodule就因此而生:

/**
 * @module UDTWO
 * @submodule Array
 */
UDTWO.Array = {};

 

@extends

@extends描述类继承关系时非常有用,声明了当前累的超类是哪个:

/**
 * @class AppView
 * @extends UDTWO.View
 */
var AppView = UDTWO.View.extend({});

 

@constructor

如果一个类可被实例化,说明它得有个构造方法。如果你用的是原型链的方式,那类的构造也应该是构造方法。

/**
 * @class Point
 * @constructor
 * @param {Number} X
 * @param {Number} Y
 */
function Point(x, y){
    this.x = x;
    this.y = y;
}

 

@static

@static是描述那些不能实例化的静态类。一个最好的说明就是Math对象,你不必实例化才能调用其带的方法。是通过这个类本身来调用的:

/**
 * @class StringFilter
 * @static
 */
var StringFilter = {};

 

方法也可以静态化:可以实例化的类中,可能有些类级别的方法,这些方法被设计成静态的(只能被类调用)。

/**
 * @class Person
 * @constructor
 */
function Person(){ }

/**
 * @method All
 * @static
 */
Person.All = function(){ };

 

@final

本标签描述属性和常量:值不可变。由于JS没有常量的概念,但编码的模式规范可能有这样的需求,那么这个标签就可以足以说明:

/**
 * @property DATE_FORMAT
 * @final
 */
var DATE_FORMAT = "%m %d, %Y";

 

@param

@param定义了@method(包括@constructor)或@event的参数。@param后写三个信息:name参数名,type参数类型(可选),description参数描述。这三个顺序可以为name type description或者type name description,参数类型必须用{}包括起来。

参数有可选项,放入[]中表示为可选参数,后接=someVal表明是默认参数(显然,只有可靠参数才会有默认值)。用*表示多个参数(name*表示1个或多个参数,[name]*表示0个或多个参数)。

/**
 * @class Point
 * @constructor
 * @param [x=0] {Number} 坐标点X坐标
 * @param [y=0] {Number} 坐标点Y坐标
 */
function Point(x, y){
    this.x = x || 0;
    this.y = y || 0;
}

 

@return

方法的返回值。@return后面要接type description。

@type

上面提到的主标签@property。你可以用@type标识其类型,如果类型为多个,则用“|”分隔。

@private / @protected

传统语言中都有private属性或者方法,不能在实例之外访问。与常量一样,JS里可以用@private / @protected来标识此项。

Protected属性或者方法是介于public和private之间的:它们只能被实例本身或者子类访问。

@requires

如果一个module依赖多个module,那么就用@requires来说明。

/**
 * @module UDTWO.Model
 * @requires UDTWO
 */

 

@requires用逗号分隔表明同时依赖多个。

@default

声明一个@property时用@default来定义它的默认值,须配合@type使用。

/**
 * @property element
 * @type String
 * @default "div"
 */
element: "div",

 

@uses

JS没有类,但是可以模拟子类,甚至于子类还是个混血儿(mixes):设置从另一个类中“借”其属性和方法。这说的不是继承,因为你可以嵌套多个类。如果一个类“借”用了其他类,可以用@uses说明:

/**
 * @class UDTWO.Admin
 * @uses UDTWO.BLL
 * @uses UDTWO.DAL
 */
UDTWO.Admin = {
    mixes: [UDTWO.BLL, UDTWO.DAL],
    //...
}

 

@example

想在代码中加入实例说明?那么就请用@example标签,后面缩进一级跟着写上实例,多少个实例无所谓。

@chainable

依照jQuery的链式风格,方法里面返回了当前对象,这样可以调用完一个方法后接着调用另一个方法,此时请用@chainable表明。

/**
 * @method addClass
 * @chainable
 */
jQuery.prototype.addClass = function(class){
    //...
    return this;
}

 

@deprecated

该标签表明代码不可再这么用,弃用的功能可能在今后的版本中更新或被移除,也可以在后边加些描述来说明为什么要这么做。

@since

该标签告诉读者自哪个版本起此代码被加入进来。

@beta

表示代码为测试版。

@extension / @extensionfor / @extension_for

该标签与@user相对。用它标明哪个类在其他类中能被嵌套,不是说此类总是被嵌套,而是说明可以被嵌套。

posted on 2013-10-01 13:15  雨梦萱橪  阅读(392)  评论(0编辑  收藏  举报