Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 同一变量内的引用对象_Javascript - Fatal编程技术网

Javascript 同一变量内的引用对象

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

我有一个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:}对象,但我要做的是访问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进行交叉引用。是的,但我怀疑这种影响应该可以忽略不计,即使是在对象很多的情况下。对于我来说,由于上述原因,有了这段代码,可维护性将是最大的问题。