如何修改JavaScript模块同时导出常量与getUser等函数
错误原因
你之前的写法存在语法逻辑问题:逗号运算符会直接返回其左侧Object.freeze(...)的执行结果作为导出值,后面的getUser: function() {}是孤立的无效语法片段,根本没有被合并到导出对象中,自然无法生效。
注意:被Object.freeze冻结后的对象无法新增、修改、删除属性,所有要导出的常量、方法必须在冻结操作前完成合并,冻结后再追加属性会直接失效。
正确修改方案
直接把你要导出的getUser等函数封装成对象,作为Object.assign的参数传入,和两类常量一起合并到目标对象后再冻结即可,完全兼容原有常量的访问逻辑。
修改后的mymodule.js代码如下:
const type1 = require('./constants1.js'); const type2 = require('./constants2.js'); // 自定义导出的方法,后续新增函数直接往这个对象里加就行 const exportMethods = { getUser() { // 此处填写getUser的具体业务逻辑 }, // 其他需要导出的函数可以直接在这里追加 // getConfig() {}, // updateUser() {} } module.exports = Object.freeze( Object.assign( Object.create(null), type1, type2, exportMethods ) )
消费端使用示例
修改后原有常量访问逻辑完全不变,新增方法可直接调用:
const udb = require('./mymodule.js'); // 原有常量访问正常 console.log(udb.DOUBLE); // 输出1 console.log(udb.FLOAT); // 输出2 // 新增方法可直接调用 const user = udb.getUser();
内容的提问来源于stack exchange,提问作者Sudarshan Soma
相关产品推荐
相关产品推荐

