2015-12-21 47 views
3

我想定義具有共同屬性的對象:出口對象,擴展和再出口它ES6

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'); 

在momment我用browserify和熱曲ire和modules.export語法。但我想使用ES6語法。

我該怎麼辦?謝謝。

+2

目前還不清楚你在問什麼。你在問如何使用ES6模塊語法導出某些東西? 'Object.assign'不會改變。 –

+0

我寫的片段有三個不同的文件。您如何定義導出和導入聲明以使此代碼有效? – davidgnin

回答

3

導出的變量在模塊的約束,這樣你就可以修改導入的值,它會在其他地方

//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'} 

This article大約有更多的解釋來改變它。

此外,Rollup項目主頁有一個很好的操場來測試es6模塊的工作方式。見this example

+0

在'b.js'中,通過導入'a.js'還不夠嗎?爲什麼在'b.js'中導入'config.js'也是必要的, a.js'? – davidgnin

+0

你想如何訪問config.js?你可以從'b.js'再次輸出'Config',然後一次導入就足夠了。 –

+0

好吧,我明白了。要將Config聲明爲一個常量?爲什麼不只是一個變量?似乎奇怪的修改了一個常量的內容 – davidgnin

2

,您可以撥打廠家:

//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'); 
+0

好方法:「) – vijay