【问题标题】:Can I JsDoc a return value for a Factory method properly?我可以 JsDoc 正确地为工厂方法返回值吗?
【发布时间】:2011-11-02 05:03:37
【问题描述】:

我正在寻找一种方法来构建一个不需要加载所有源文件来播放应用程序的系统。我过去的项目有 200 多个 .js 文件(我不是在开玩笑!),重新加载页面来测试您开发的功能真的很慢。

我研究了 Dojo,发现他们是如何构建动态加载器的。基本上你只需加载一个核心组件,然后在需要时加载其他所有组件。

我正在考虑在我的应用程序中实现一个工厂方法,它允许我在 JavaScript 中构造新的对象实例:

var user = MyApp.create('MyApp.model.User');

代替:

var user = new MyApp.model.User();

我想放弃 new 关键字的原因是因为前一种方法允许我以延迟加载的方式动态加载组件,如果它不存在的话。工厂方法可以查看目标对象是否已定义,如果未定义,则加载它。

唯一的问题我面临的事实是 IDE 不再理解 userMyApp.model.User 的类型,这当然不是一件好事。

有没有办法解决这个困境?我能以某种方式 JsDoc 那个工厂方法吗?

【问题讨论】:

    标签: javascript lazy-loading jsdoc oop


    【解决方案1】:

    如果您的工厂方法根据参数返回各种类型的对象,那么您无法以 IDE 可以理解的方式记录工厂方法本身的返回值(使用 @returns)。至少我不知道有什么办法。

    但是您可以通过注释保存对象的变量来轻松解决您的问题,如下所示:

    /**
     * @type {MyApp.model.User}
     */
    var user = MyApp.create('MyApp.model.User');
    

    当然,我不知道您的特定 IDE 是否可以解释这一点。我的可以(使用 Komodo)。

    【讨论】:

    • 我已经这样做了很长时间了。问题是您在重复自己,而我想做的是 DRY(不要重复自己)。我不想在我创建对象的 100 个地方指定它,而是想在工厂方法中指定一次。
    • 但是,同样,如果您的工厂不返回特定类型,您无法记录特定的返回类型 - 这是 IDE 需要的。所以如果你这么说,那根本就做不到。对于每种类型的对象,您都需要一个单独的工厂,这可能不是您想要的。
    • 当然可以,但是当前版本的JsDoc不行。可能有一种方法可以记录工厂。这意味着 IDE 会读取您传递给工厂的字符串,并假定返回的对象就是那个。
    • 是的,这是非常需要的,但似乎如此明显的需要以至于我很惊讶这还不存在。有更新吗?
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多