如何在JavaScript中扩展已导入的命名空间并混入自定义函数?
扩展已有命名空间的可行实现方法
你的示例代码本身就是完全可行的ES模块实现方式,直接就能用,原理很简单:
- 先通过
import * as N from "namespace"把原命名空间的所有导出成员打包成一个对象 - 用对象展开语法
{...N, fun1, fun2}把原命名空间的所有成员和你自定义的fun1、fun2合并,再整体导出 - 其他文件按照
import * as N from "./namespaceWithMixins.js"的方式导入后,就能直接调用原命名空间的方法和你的自定义方法
补充说明
- 同名覆盖问题:如果原命名空间里有和你自定义函数同名的成员,自定义函数会覆盖原成员——因为对象展开时,后面的属性会替换前面同名的属性。
- 其他写法可选:如果只需要扩展原命名空间的部分成员,也可以单独导入后再导出,比如:
// namespaceWithMixins.js import { originalFuncA, originalFuncB } from "namespace"; // 自定义函数 export const fun1 = (x, y) => x + y; export const fun2 = (x, y) => x * y; // 导出原命名空间的指定成员 export { originalFuncA, originalFuncB };
不过这种写法在原命名空间成员较多时,不如对象展开语法简洁。
3. 路径注意:如果namespace是本地文件,导入时要写相对路径(比如./namespace.js);如果是第三方npm包,直接写包名即可。
内容的提问来源于stack exchange,提问作者Adam B.
相关产品推荐
相关产品推荐

