Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 最好导出一个包含函数的对象,或者只导出ES6中的多个函数(有约定吗?)_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 最好导出一个包含函数的对象,或者只导出ES6中的多个函数(有约定吗?)

Javascript 最好导出一个包含函数的对象,或者只导出ES6中的多个函数(有约定吗?),javascript,ecmascript-6,Javascript,Ecmascript 6,这是一个惯例问题。我是ES6新手,但我正在尝试利用模块系统。从单个文件导出多个函数或导出包含这些函数的单个对象是首选/更常见的 例如: utils.js export function add(num1, num2) { return num1 + num2; } export function minus(num1, num2) { return num1 - num2; } const utils = { add: (num1, num2) => { retur

这是一个惯例问题。我是ES6新手,但我正在尝试利用模块系统。从单个文件导出多个函数或导出包含这些函数的单个对象是首选/更常见的

例如:

utils.js

export function add(num1, num2) {
  return num1 + num2;
}

export function minus(num1, num2) {
  return num1 - num2;
}
const utils = {
  add: (num1, num2) => {
    return num1 + num2;
  },

  minus: (num1, num2) => {
    return num1 - num2;
  }
}

export default utils;
然后像这样使用它:

import {add, minus} from 'utils.js';
vs

utils.js

export function add(num1, num2) {
  return num1 + num2;
}

export function minus(num1, num2) {
  return num1 - num2;
}
const utils = {
  add: (num1, num2) => {
    return num1 + num2;
  },

  minus: (num1, num2) => {
    return num1 - num2;
  }
}

export default utils;

在一个包含50-100个函数的utils文件中,第二种方法显然是赢家。但是我觉得这有点不对劲,我不知道为什么。

如果你想通过你的UTIL文件公开50-100个函数,那么我建议使用命名的导出

export function add() {}
否则,每次导入UTIL时,您都会导入所有函数。这可能是您有时想要的,但对于任何给定的模块,很可能只有少数几个可用的函数。 如果希望所有函数都是一个简单的
import*as-utils from'/utils'就足够了

但是,如果您想安全防范,没有什么不可以说您可以使用这两种模式

export function add() {};

const utils = {
   add: add
};
export default utils; 
以上是有效的,也是很常见的

请记住,从Babel 6.x开始,使用
导出默认值
开发库时,将实际生成一个对象(正确的方式),其中包含导出对象将附加到的
默认值
属性

import utils from './utils';

console.log(utils);
// { default: yourUtilsObject }

展望未来,导出多个函数可能会更好,因为这样可以根据是否已导入消除死代码

如果导出一个大对象,则不可能总是使用静态分析来判断哪些函数需要保留,哪些函数可以安全地丢弃


如果导出多个命名函数,则模块绑定器可以分析AST,然后安全地将实际导入的函数列为白名单

谢谢大家!!你给了我我想要的解释。我已经在使用第一种语法,我想我会继续使用它。我也不知道默认的事情。所以,谢谢你。另请参见