Javascript 导出对象,在ES6中扩展并重新导出它

Javascript 导出对象,在ES6中扩展并重新导出它,javascript,import,ecmascript-6,Javascript,Import,Ecmascript 6,我想定义一个具有公共属性的对象: var Config = { a: 'fsdf', b: 56, c: 'fsfsdfsd', set: function set(prop, val) { this[prop] = val; } }; var Config = Object.assign(Config, { d: 34, e: 'qqwqw' }); 在另一个文件中,我想使用自定义属性对其进行扩展: var Config = { a: 'fsdf',

我想定义一个具有公共属性的对象:

var Config = {
  a: 'fsdf',
  b: 56,
  c: 'fsfsdfsd',
  set: function set(prop, val) {
    this[prop] = val;
  }
};
var Config = Object.assign(Config, {
  d: 34,
  e: 'qqwqw'
});
在另一个文件中,我想使用自定义属性对其进行扩展:

var Config = {
  a: 'fsdf',
  b: 56,
  c: 'fsfsdfsd',
  set: function set(prop, val) {
    this[prop] = val;
  }
};
var Config = Object.assign(Config, {
  d: 34,
  e: 'qqwqw'
});
然后,我想读取和修改其他文件中的对象:

var x = Config.d + Config.b;
Config.set('a', 'asdf');
当时我正在使用browserify和require以及modules.export语法。但是我想使用ES6语法


我怎么做?谢谢。

您可以创建一个工厂:

//config.js
export function createConfig(ext) {
  return Object.assign(
    {},
    {
      a: 'fsdf',
      b: 56,
      c: 'fsfsdfsd',
      set (prop, val) {
        this[prop] = val;
      }
    },
    ext
  );
};

//index.js
import { createConfig } from './config';

let config = createConfig({
  d: 34,
  e: 'qqwqw'
});

export config;

// x.js
import { config } from './index.js';

var x = config.d + config.b;
config.set('a', 'asdf');

导出的变量是跨模块绑定的,所以您可以修改导入的值,它将在其他地方更改

//config.js
const Config = {a: 'value1'};
export default Config;

//a.js
import Config from './config';
// you don't need to reassign return value, first argument will be mutated itself
Object.assign(Config, {a: 'value2'}); 

//b.js
import Config from './config';
import './a';

console.log(Config); // prints {a: 'value2'}
有更多的解释


此外,Rollup项目主页有一个很好的平台来测试es6模块是如何工作的。看。

不清楚你在问什么。您是否在询问如何使用ES6模块语法导出某些内容<代码>对象。分配不会更改。我编写的片段位于三个不同的文件中。如何定义导出和导入声明以使此代码正常工作?在
b.js
中,导入
a.js
是不够的?如果在
a.js
中导入了
config.js
,为什么还需要在
b.js
中导入它?您希望如何访问config.js?您可以从
b.js
再次导出
Config
,然后一次导入就足够了。好的,我明白了。有理由将Config声明为常量吗?为什么不只是一个变量?修改常量的内容似乎很奇怪。Javascript中的
const
意味着您无法更改对对象的引用。您不能将新对象指定给它,但仍然可以对该对象本身进行变异。