JSDoc无法识别JavaScript类继承问题求助
解决JSDoc无法识别类继承关系的问题
核心问题出在你用self手动绑定方法的写法,脱离了JSDoc默认识别的标准继承语法规则,导致它无法解析继承关系、方法重写,也没法展示父类的属性和未重写方法。以下是两种可行的解决方式:
1. 改用ES6标准类继承语法
这是最省心的方案,JSDoc原生支持ES6的class extends语法,能自动识别继承关系、方法重写,无需额外配置。
示例代码:
/** * 基础图层类 * @class */ class Layer { constructor() { /** * 卫星属性 * @type {string} */ this.satellite = 'default'; } /** * 计算WI值的方法 * @returns {number} WI值 */ compute_wi() { // 父类逻辑 return 0; } } /** * SAR图层类,继承自Layer * @class * @extends Layer */ class SarLayer extends Layer { /** * 重写父类的compute_wi方法 * @override * @returns {number} 重写后的WI值 */ compute_wi() { // 子类重写逻辑,调用父类方法用super return super.compute_wi() + 1; } }
生成文档后,SarLayer会自动关联Layer的继承关系:重写的compute_wi会被标记为override,父类的satellite属性和未重写的方法也会在子类文档中展示。
2. 保留self写法时手动标注JSDoc标签
如果项目限制不能改用ES6类,给JSDoc明确标注继承和重写关系即可:
示例代码:
/** * 基础图层类 * @constructor */ function Layer() { const self = this; /** * 卫星属性 * @type {string} */ self.satellite = 'default'; /** * 计算WI值的方法 * @returns {number} WI值 */ self.compute_wi = function() { return 0; }; } /** * SAR图层类,继承自Layer * @constructor * @augments Layer */ function SarLayer() { const self = Object.create(new Layer()); /** * 重写父类的compute_wi方法 * @override * @returns {number} 重写后的WI值 */ self.compute_wi = function() { return self.__proto__.compute_wi.call(self) + 1; }; return self; }
这里用@augments(和@extends等价)标注子类继承自父类,@override标记重写的方法,JSDoc就能正确解析继承关系,展示父类的属性和未重写方法。
3. 检查JSDoc配置
确保你的JSDoc配置文件(如jsdoc.json)没有禁用ES6语法解析,默认配置已支持,若有自定义配置,参考以下基础配置:
{ "source": { "includePattern": ".+\\.js(doc|x)?$", "excludePattern": "(^|\\/|\\\\)_" }, "opts": { "recurse": true } }
内容的提问来源于stack exchange,提问作者Theo Patron
相关产品推荐
相关产品推荐

