【问题标题】:JSDoc document final methodJSDoc 文档最终方法
【发布时间】:2021-09-01 21:27:25
【问题描述】:

有没有办法在 JS 中使用 JSDoc 记录最终方法。

Java 中的 final 方法是不能被覆盖的。

我在 JSDoc 网站上找不到任何选项。

【问题讨论】:

    标签: javascript jsdoc


    【解决方案1】:

    看来你不能,因为a search of the JSDoc documentaton for final 没有结果。

    这并不奇怪,因为您不能在 JavaScript 中可靠地拥有 final 方法。因此,如果一个方法不被覆盖很重要,您可能不得不求助于在其描述中记录它。尽管如此,JSDoc 还是有可能提供一种方法来注释它以供工具使用,但它似乎没有。

    这是在 JavaScript 中使用 final 方法的一种不可靠方法:

    class Base {
        constructor() {
            if (this.finalMethod !== Base.prototype.finalMethod) {
                throw new Error(`You must not override 'finalMethod' in your subclass.`);
            }
        }
        
        finalMethod() {
            console.log("This is the pseudo-final method");
        }
    }
    
    class Derived extends Base {
        finalMethod() {
            console.log("This is the overridden method");
        }
    }
    
    const d = new Derived(); // Throws error

    但这很容易通过以下几种方式克服:

    • 等待创建方法,直到您的子类构造函数已经调用了超类构造函数。
    • 返回一个不使用超类构造函数创建的对象(例如,return Object.assign(Object.create(this), { finalMethod() { /*...*/ } });(虽然现在我想起来了,这实际上只是上面 #1 的不同方式。)
    • 返回一个代理。
    • 在不调用超类构造函数的情况下创建您的子类实例(推荐 - 但是,这些都不是)
    • ...可能还有其他人...

    【讨论】:

    • 谢谢。由于 JSDoc 实际上有许多 JavaScript 没有的标签,例如 @private(最近添加到 JS)和 @interface,尽管静态成员也可能有一个未记录的标签。
    • @user5507535 - 正如我上面所说,如果你可以注释它确实会很方便,但如果它没有在 jsdoc.app 上列出,我认为你不能。
    猜你喜欢
    • 2013-01-31
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多