我有这个javascript文件,其中包含React应用程序的对象中的样式:
const styles = {
fonts: {
Georgia: 'Georgia, \'Times New Roman\', Times, serif',
},
App: {
textAlign: 'center',
fontFamily: this.fonts.Georgia,
},
};
module.exports = styles;
fontFamily: this.fonts.Georgia
会引用App: { fonts: '' }
对象,但我想要做的是访问fonts
内已定义的styles
对象。我怎么能这样做?
有效的是:
const fonts = {
Georgia: 'Georgia, \'Times New Roman\', Times, serif',
};
const styles = {
App: {
textAlign: 'center',
fontFamily: fonts.Georgia,
},
};
module.exports = styles;
在这种情况下这是有效的,但上层解决方案会更好。
答案 0 :(得分:4)
简单来说,你做不到。 JavaScript对象没有父母的概念。
const App = {
textAlign: 'center',
fontFamily: this.fonts.Georgia, // ???
}
this
在这种情况下意味着什么?
此外
const styles = {
fonts: 'Georgia, \'Times New Roman\', Times, serif',
App
};
这与您发布的第一个对象相同。
您唯一的选择是按原样拆分两个对象。要将此详细信息隐藏在模块外部,您可以执行以下操作:
module.exports = {fonts, styles};
这将使外部可以使用字体和样式。您可以混合和匹配以获得所需的确切对象,但实际结构与问题无关。
答案 1 :(得分:1)
一种有效的方法是使用getter动态检索fonts
属性。
const styles = {
fonts: {
Georgia: 'Georgia, \'Times New Roman\', Times, serif',
},
App: {
textAlign: 'center',
get fontFamily () { return styles.fonts.Georgia },
},
};
console.log(styles);

请注意,这有一些缺点:
App.fontFamily
属性如果动态更改,将始终镜像fonts
。这可能是也可能不是理想的行为。App.fontFamily
只能获取,而不能设置。