Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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_Object - Fatal编程技术网

Javascript 嵌套对象的键是否存储在对象中?

Javascript 嵌套对象的键是否存储在对象中?,javascript,object,Javascript,Object,如果我有以下对象: const obj={ nestedObj:{ 福:“酒吧”, } } 并使用obj.nestedObjA访问其中一个嵌套对象,生成的对象将在原始对象中包含其键的一些信息,还是仅仅是对象文本{foo:“bar”} 我想实现这样的目标: constfun=(nestedObj)=>{ console.log(nestedObj.key);//在其父对象中打印obj的键 console.log(nestedObj.foo); } 不实际存储密钥两次,例如: const obj

如果我有以下对象:

const obj={
nestedObj:{
福:“酒吧”,
}
}
并使用
obj.nestedObjA
访问其中一个嵌套对象,生成的对象将在原始对象中包含其键的一些信息,还是仅仅是对象文本
{foo:“bar”}

我想实现这样的目标:

constfun=(nestedObj)=>{
console.log(nestedObj.key);//在其父对象中打印obj的键
console.log(nestedObj.foo);
}
不实际存储密钥两次,例如:

const obj={
nestedObjA:{
key:“nestedObjA”,//我想删除这一行
福:“酒吧”,
}
}
乐趣(对象nestedObjA);
您可以尝试执行以下操作:

Object.keys(obj) // this will print the keys of the current object

cf:

您可以使用代理来定义getter。当getter触发时,您可以检查键是否在对象中,如果在对象中,则返回一个新对象,该对象将键作为属性以及对象内容,如下所示:

const obj={
nestedObj:{
福:“酒吧”,
}
};
const new_obj=新代理(obj{
get:(对象,键)=>{
如果(输入obj){
返回{
钥匙
…obj[键]
};
}
}
});
const fun=(obj)=>{
console.log(obj.nestedObj);//在其父对象中打印obj的键
控制台日志(obj.foo);
}

乐趣(新事物)
是否检查了javascript对象中的
getter
?请注意,这可能会与对象的现有属性发生冲突。我认为更有用的方法是将键作为数据显式地传递给函数,例如
fun('nestedObj',obj.nestedObj)
。如果这感觉太重复,您可以创建一个类似于
f(fun,obj,'nestedObj')
…@deceze的助手函数,谢谢您指出这一点。我喜欢使用helper函数的想法