Javascript 代碼解釋範例
一、語法
1. 解釋的申明
語法:寫在解釋塊第一行
/**
* events-function(這是解釋的申明)
* @description 切換音頻播放狀況(播放/住手)
*/
togglePlay: function() {
// 省略別的代碼...
}
2. 標籤
語法:@tagName
/** @function */
function fn() {
}
3. 標籤的申明
語法:- 申明筆墨
/**
* @constructor Student - 門生
* @param {string} name - 門生的名字
*/
function Student(name) {
}
4. 範例
語法:{typeName} (可與標籤連繫運用,如@param)
/**
* @param {string} a 必傳參數
*/
function fn(a, b, c) {
}
5. 可選參數
語法:[paramName] (可與標籤連繫運用,如@param)
/**
* @param {string} a 必傳參數
* @param {number} [b] 可選參數
*/
function fn(a, b) {
}
6. 參數有默認值
語法:[paramName=value] (可與標籤連繫運用,如@param)
/**
* @param {string} a 必傳參數
* @param {number} [c=666] 參數有默認值
*/
function fn(a, c) {
}
7. 鏈接
語法:[link text]{@link namepathOrURL}
/**
* See {@link MyClass} and [MyClass's foo property]{@link MyClass#foo}.
* Also, check out {@link http://www.google.com|Google} and
* {@link https://github.com GitHub}.
*/
二、示例
1. 函數
/**
* 轉換時候字符串為時候對象
* @function _str2time
* @param strTime {String} - e.g "2017-02-13 10:02:58" or "2017-02-13" or "9:10"
* @param type {String} - e.g date, dateTime, time
*/
function _str2time(strTime, type) {
// 省略別的代碼
}
2. 類/組織函數
/**
* 定時器
* @class Timer
*/
function Timer() {
this._timeId = 0;
this._eventId = -1;
this.eventHandler = {
'stop': {}
};
/**
* 定時器是不是處於住手狀況
* @memberof Timer
* @member stopped
* @instance
*/
this.stopped = true;
/**
* 啟動定時器
* @memberof Timer
* @instance
* @method start
* @param {function} handler - 定時器每次實行時挪用的函數
* @param {number} interval - 定時器實行的時候距離
*/
this.start = function (handler, interval) {
this.stopped = false;
let _recursion = function() {
this._timeId = setTimeout(() => {
handler()
.then(() => {
if (this.stopped) {
clearTimeout(this._timeId);
this._trigger('stop');
return;
}
_recursion();
})
.catch(err => {
clearTimeout(this._timeId);
this.stopped = true;
this._trigger('stop');
if (err) throw new Error(err);
});
}, interval)
}.bind(this);
_recursion();
}
/**
* 住手定時器
* @memberof Timer
* @instance
* @method stop
*/
this.stop = function () {
this.stopped = true;
}
}
/**
* 監聽事宜
* @memberof Timer
* @instance
* @method on
* @param {string} type - 事宜範例 e.g 'stop'
* @param {function} fn - 事宜處置懲罰函數
* @return {number} eventId - 事宜處置懲罰函數Id,用於作廢監聽
*/
Timer.prototype.on = function (type, fn) {
let _eventId = fn.name || ++this._eventId;
this.eventHandler[type][_eventId] = fn;
return _eventId;
}
/**
* 觸發事宜
* @private
*/
Timer.prototype._trigger = function (type) {
let handlerMap = this.eventHandler[type];
for (let key in handlerMap) {
handlerMap[key]();
}
}
/**
* 作廢監聽事宜
* @memberof Timer
* @instance
* @method off
* @param {string} type - 事宜範例 e.g 'stop'
* @param {function} target - 事宜處置懲罰函數Id或許函數名字
*/
Timer.prototype.off = function (type, target) {
let _target = (typeof target === 'function') ? target.name : target;
delete this.eventHandler[type][_target];
}