Javascript 为什么在console.log中的第一个对象上获取[Getter/Setter]?

Javascript 为什么在console.log中的第一个对象上获取[Getter/Setter]?,javascript,reactjs,react-native,Javascript,Reactjs,React Native,我尝试为我的应用程序创建主题,这是我的主题示例: //themeContext.js export const buildTheme = (userColors = {}, userFonts = {}, userTheme = {}) => { const mergedColors = { ...defaultColors, ...userColors, }; // merge fonts const mergedFonts = { ...defa

我尝试为我的应用程序创建主题,这是我的主题示例:

//themeContext.js
export const buildTheme = (userColors = {}, userFonts = {}, userTheme = {}) => {
  const mergedColors = {
    ...defaultColors,
    ...userColors,
  };
  // merge fonts
  const mergedFonts = {
    ...defaultFonts,
    ...userFonts,
  };

  return {
    colors: mergedColors,
    fonts: mergedFonts,

    label: {
      marginTop: 10,
      fontSize: 14,
      color: mergedColors.textPrimary,
      ...(userTheme.label)
    },
    // error
    error: {
      fontSize: 12,
      color: mergedColors.error,
      ...(userTheme.error),
    },

    //another style
  }
}
export const ThemeContext = createContext({
  theme:buildTheme()
});
在DynamicForm.js上,我使用
themeContext
如下:

export default class DynamicForm extends Component{
  constructor(props) {
    super(props);
    this.state = {
      theme:this.props.theme?this.props.theme:buildTheme(),
      responses: {},
    };
  }

  render(){
    return(
      <ThemeContext.Provider value={this.state}>
        <TextField
          //handle prop
        />
      </ThemeContext.Provider>
    )
  }
}
以及
console.log(主题)
的结果:


正如您在
label
上看到的那样,我得到了
[Getter/Setter]
但不是每个键的值,为什么会发生这种情况?

这是因为
marginTop
fontSize
color
不仅仅是简单的属性,它们基本上都有Getter和Setter,它们是获取和设置值的函数

如果要强制它调用getter来获取值,可以这样做:

console.log(Object.assign({}, theme));
一个可能的替代方案是:

console.log(JSON.stringify(theme));

你能在创建对象的地方发布代码并记录它吗
buildTheme
看起来不应该在顶部产生任何getter/setterlevel@CertainPerformance我真的不明白你说的
在哪里创建对象并记录它是什么意思?
,我知道,我在一个文件中创建对象,然后在另一个
组件上导入它,在组件的
render
中,我记录了主题,这就是我让你说的
这里是我构建主题的完整日志:
,那么你可以发布你如何记录与函数相关的日志吗?(毕竟,要记录它,首先必须有一个对象)如果我在对象的每个值中都有getter/setter,我会检查我的代码,但是log show only
label
键有getter/setter,这就是为什么我感到困惑的原因,而仅通过调用
buildTheme
构造的普通对象不应该产生这样的getter/setter,因为
label
属性中定义的值不是getter/setter,这听起来像是在调用
buildTheme
之后,但在记录对象之前,有什么东西在改变对象
console.log(JSON.stringify(theme));