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
意味着您无法更改对对象的引用。您不能将新对象指定给它,但仍然可以对该对象本身进行变异。