Javascript 同一变量内的引用对象
我有一个javascript文件,其中包含React应用程序对象中的样式:Javascript 同一变量内的引用对象,javascript,Javascript,我有一个javascript文件,其中包含React应用程序对象中的样式: const styles = { fonts: { Georgia: 'Georgia, \'Times New Roman\', Times, serif', }, App: { textAlign: 'center', fontFamily: this.fonts.Georgia, }, }; module.exports = styles; fontFamily:this
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:}对象,但我要做的是访问styles中已定义的fonts对象。我该怎么做
有效的方法是:
const fonts = {
Georgia: 'Georgia, \'Times New Roman\', Times, serif',
};
const styles = {
App: {
textAlign: 'center',
fontFamily: fonts.Georgia,
},
};
module.exports = styles;
在这种情况下这是可行的,但是上面的解决方案会更好。简单地说,你不能。JavaScript对象没有父对象的概念
const App = {
textAlign: 'center',
fontFamily: this.fonts.Georgia, // ???
}
在这种情况下,这意味着什么
而且
const styles = {
fonts: 'Georgia, \'Times New Roman\', Times, serif',
App
};
这与您发布的第一个对象相同
您唯一的选择是按原样分割两个对象。要在模块外部隐藏此详细信息,可以执行以下操作:
module.exports = {fonts, styles};
这将使字体和样式都可供外部使用。你可以混合搭配得到你想要的确切对象,但实际结构与问题无关。简单地说,你不能。JavaScript对象没有父对象的概念
const App = {
textAlign: 'center',
fontFamily: this.fonts.Georgia, // ???
}
在这种情况下,这意味着什么
而且
const styles = {
fonts: 'Georgia, \'Times New Roman\', Times, serif',
App
};
这与您发布的第一个对象相同
您唯一的选择是按原样分割两个对象。要在模块外部隐藏此详细信息,可以执行以下操作:
module.exports = {fonts, styles};
这将使字体和样式都可供外部使用。您可以混合和匹配以获得所需的确切对象,但实际结构与问题无关。一种有效的方法是使用getter动态检索fonts属性 常量样式={ 字体:{ 佐治亚州:“佐治亚州,\'Times New Roman\','Times,serif', }, 应用程序:{ textAlign:'中心', 获取fontFamily{return styles.fonts.Georgia}, }, };
控制台。日志样式 一种有效的方法是使用getter动态检索fonts属性 常量样式={ 字体:{ 佐治亚州:“佐治亚州,\'Times New Roman\','Times,serif', }, 应用程序:{ textAlign:'中心', 获取fontFamily{return styles.fonts.Georgia}, }, };
控制台。日志样式;将其分配给变量?如果您绝对希望在对象表达式中仅使用此函数来执行此操作,则这是不可能的。@AndrewL。很遗憾,styles.fonts.Georgia不起作用。建议的副本是错误的。这是一个不同的问题,有不同的答案。@DanielA.White建议的副本是关于变量上不可用的,并且只在函数中可用,这是关于在树中太深的问题,因此无法使用它访问树上更高的属性。请将其分配给变量?如果您绝对希望在对象表达式中仅使用此函数来执行此操作,则这是不可能的。@AndrewL。很遗憾,styles.fonts.Georgia不起作用。建议的副本是错误的。这是一个不同的问题,有不同的答案。@DanielA.White建议的副本是关于变量上不可用的,并且只在函数中可用,这是关于这在树中太深,因此无法使用它访问树上更高的属性。很抱歉听到这个消息,感谢您的澄清。稍后会有更多字体,我想将整个样式表存储在同一个变量下,但如果我想引用同一父变量中的内容,这似乎是不可能的。你可以在应用程序中保留对样式的引用,你仍然需要单独定义它们,一旦你这样做,您可以使用类似这样的内容访问它。当然,它允许循环引用此。style.App.style.App.style.App.style…,因此递归迭代时要小心。很抱歉听到这个消息,感谢您的澄清。稍后会有更多字体,我想将整个样式表存储在同一个变量下,但如果我想引用同一父变量中的内容,这似乎是不可能的。你可以在应用程序中保留对样式的引用,你仍然需要单独定义它们,一旦你这样做,您将能够通过类似这样的方式访问它。当然,它允许循环引用this.styles.App.styles.App.styles…,因此递归迭代时要小心。使用get-inside对象是否会影响性能?如果我开始像对待Sass或手写笔样式表一样对待React中的内联样式,我会在对象中大量使用get进行交叉引用。是的,但我怀疑这种影响应该可以忽略不计,即使是在对象很多的情况下。对于我来说,由于上述原因,有了这段代码,可维护性将是最大的问题。使用get-inside对象是否会影响性能?如果我开始像对待Sass或手写笔样式表一样对待React中的内联样式,我会在对象中大量使用get进行交叉引用。是的,但我怀疑这种影响应该可以忽略不计,即使是在对象很多的情况下。对于我来说,由于上述原因,有了这段代码,可维护性将是最大的问题。