1

我有这个物体:

popup_data={俱乐部:{type:“俱乐部”,类型(_img):{header:'CLUB header',img:'https://source.unsplash.com/random/800x600',sub_header:'俱乐部子标题',content:'文本',热点位置:[5,-1.5,2.5]},热点阵列(hotspots_array):[{id:()=>this.club.type+'-'+'type_img',位置:()=>this.club.type_img.hotspot_position,},]   },

如何获取类型类型img.hotspot_position从这些嵌套函数

1
  • 如果有多个对象,可以创建一个实用程序来绑定函数。
    – 基思
    评论 2022年4月5日10:42

3个答案

重置为默认值

只需使用var名称,弹出数据(_D)

popup_data={俱乐部:{type:“俱乐部”,类型(_img):{header:'CLUB header',img:'https://source.unsplash.com/random/800x600',sub_header:'俱乐部子标题',content:'文本',热点位置:[5,-1.5,2.5]},热点阵列(hotspots_array):[{id:()=>popup_data.club.type+“-”+“type_img”,位置:()=>popup_data.club.type_img.hotspot_position,},]   },

阅读这个这个

是什么?
在JavaScript中关键字是指对象.

哪个对象取决于如何正在被调用(使用或调用)。

这个关键字根据其使用方式引用不同的对象:

在对象方法中,指的是对象.
独自一人,指全局对象.
在函数中,指的是全局对象.
在函数中,在严格模式下,未定义.
在某一事件中,指的是要素收到事件的。
方法如调用(),应用()、和绑定()可以引用任何对象.

  • 我有两个对象,不能只使用this.type吗? 评论 2022年4月5日上午10:35
  • 不,但是如果这个答案解决了你的问题,别忘了把它标记为你的问题的答案,谢谢
    – X3R0型
    评论 2022年4月5日10:36
  • 另请参阅我的编辑,有一些有用的链接
    – X3R0型
    评论 2022年4月5日10:38
0

您可以通过指定整个对象的变量名来访问它。

popup_data={俱乐部:{类型:“俱乐部”,类型(_img):{header:'CLUB header',img:'https://source.unsplash.com/random/800x600',sub_header:'俱乐部子标题',content:'文本',热点位置:[5,-1.5,2.5]},热点阵列(hotspots_array):[{id:()=>popup_data.club.type+“-”+“type_img”,位置:()=>popup_data.club.type_img.hotspot_position,},]   },

由于您使用的是ES6箭头功能,根本不起作用。如果你使用正常功能,就是里面的物体热点_阵列而不是整个对象。

0

如果您有多个项,并且希望所有这些项都可以访问根,那么可以绑定函数。这里需要使用无箭头函数,因为它们没有..

你甚至可以提取你的身份证件位置函数也从对象中导出,这样您就不会创建完全相同的函数的多个实例。

如。。

函数id(){return this.club.type+“-”+“type_img”;}功能位置(){返回this.club.type_img.hotspot_position;}const弹出数据={俱乐部:{type:“俱乐部”,类型(_img):{header:'CLUB header',img:'https://source.unsplash.com/random/800x600',sub_header:'俱乐部子标题',内容:“文本”,热点位置:[5,-1.5,2.5]},热点阵列(hotspots_array):[{   name:'测试',id,位置}, {name:'测试2',id,位置}]   }  };const popup_data_2={俱乐部:{type:'这是俱乐部2',类型(_img):{热点位置:[5,-1.5,2.5]},热点阵列(hotspots_array):[{   id,位置}]   }  };函数bindFunctions(r,a){Object.entries(a).map(([k,v])=>{const tp=v型;if(tp===“函数”){a[k]=v.bind(r);}else if(tp===“对象”){bindFunctions(r,v);}});}bindFunctions(弹出数据,弹出数据);bindFunctions(popup_data_2,popup_data_2);console.log(popup_data.club.hotspots_array[0].id());console.log(popup_data.club.hotspots_array[0].position());控制台.log(popup_data_2.club.hotspots_array[0].id());

另一种选择是,只有一个根项可能具有限制性。如果您想要更高级的东西,我会使用函数创建Object,并使用闭包的强大功能。下面的示例中,我添加了另一个可以访问其数组的道具。

函数makeObject(数据){const root=数据;for(data.club.hotspots_array的常数){//现在让我们添加函数h.id=()=>root.club.type+“-”+“type_img”;h.位置=()=>根.club.type_img.hotspot_position;h.array=data.club.hotpots_array;}返回根;}const o1=生成对象({俱乐部:{type:“俱乐部”,类型(_img):{header:'CLUB header',img:'https://source.unsplash.com/random/800x600',sub_header:'俱乐部子标题',content:'文本',热点位置:[5,-1.5,2.5]},热点阵列(hotspots_array):[{   name:'测试',}, {name:'测试2',}]   }});console.log(o1.club.hotspots_array[0].id());控制台.log(o1.club.hotspots_array[0].position());console.log('array:'+o1.club.hotspots_array[0].array.length);

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.