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 onlylabel
键有getter/setter,这就是为什么我感到困惑的原因,而仅通过调用buildTheme
构造的普通对象不应该产生这样的getter/setter,因为label
属性中定义的值不是getter/setter,这听起来像是在调用buildTheme
之后,但在记录对象之前,有什么东西在改变对象
console.log(JSON.stringify(theme));