首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在npm包中导出构造函数和枚举

在npm包中导出构造函数和枚举
EN

Stack Overflow用户
提问于 2019-03-13 02:48:27
回答 1查看 337关注 0票数 2

我没有太多使用NPM或Node.js的经验,我的JavaScript工作主要局限于web浏览器。我已经编写了一个JavaScript库,它提供了两个功能: 1.构造函数,2.枚举类型。

当然,JavaScript中没有真正的“枚举”,所以我的JS文件基本上是这样的:

代码语言:javascript
运行
复制
function MyClass() {
    // Implementation
    this.doWork = function () {
        // ...
        return MyEnum.Success;
    };
}

var MyEnum = {
    Error: 0,
    Success: 1,
    Something: 2,
    More: 3
    // etc.
    // I could probably use Object.define here to make it constant
};

MyClass函数在内部使用来自MyEnum的属性,MyEnum对于MyClass的调用者也很有用。因此,它应该保持公开。

现在,npm包只能导出主对象中的属性,也可以导出对象本身。我可以做这些事情:

代码语言:javascript
运行
复制
module.exports = MyClass;

代码语言:javascript
运行
复制
module.exports = {
    MyClass: MyClass,
    MyEnum: MyEnum
};

在第一种情况下,直接使用该类很容易,但MyEnum会迷失方向。

代码语言:javascript
运行
复制
let MyClass = require("myclass");
let x = new MyClass();
// Where is MyEnum?

第二个变体在使用它时需要写两次类名。

代码语言:javascript
运行
复制
let MyClass = require("myclass");
let x = new MyClass.MyClass();
if (x.doWork() === MyClass.MyEnum.Success) { }

我可以做什么来解决这个问题,使构造函数直接可用,因为它似乎是正常的,并导出枚举?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 02:51:42

只是让枚举成为函数对象的属性吗?

代码语言:javascript
运行
复制
// myclass.js
// ...
MyClass.MyEnum = MyEnum;
module.exports = MyClass;

// elsewhere.js
let MyClass = require("myclass");
let x = new MyClass();
if (x.doWork() === MyClass.MyEnum.Success) { }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55128709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档