首页 新闻 会员 周边

一个js题目

0
悬赏园豆:30 [待解决问题]
 function kkk()
{
var a={"x":{"t":"abc"},"y":{"t":"efg"}}, extObj={w:"30",h:"20"},t={};

$.each(a,function(i,j){
t[i] = $.extend(extObj,j);
})

console.log(t);
}

t的结果是什么? 为什么,求详细解释,谢谢!
ruanmou的主页 ruanmou | 初学一级 | 园豆:5
提问于:2017-02-09 12:28
< >
分享
所有回答(1)
1

$.extend会把第二个参数对象合并第一个参数对象extObj,然后遍历对象t[x],t[y]两个属性同时绑定对象extObj,但是第二次会把第一次相同的值覆盖掉,所以结果是x,y两个属性绑定的同一个对象,结果你自己跑一下就知道了

[3] | 园豆:1174 (小虾三级) | 2017-02-09 13:57
 我是想要批量更新某个对象的属性对象的值,想得到:
{"x":{"t":"abc",w:"30",h:"20"},"y":{"t":"efg",w:"30",h:"20"}},如何实现?
支持(0) 反对(0) ruanmou | 园豆:5 (初学一级) | 2017-02-09 14:14

@ruanmou:你把 $.extend(extObj,j)改成$.extend(j,extObj)就好,这样每个j存放的内存地址不一样,也不影响合并

支持(0) 反对(0) [3] | 园豆:1174 (小虾三级) | 2017-02-09 14:23

@一寸時光: 

 我需要已a中的项目为主要的,
加入a["x"]存在定义了w,那么extObj就失效。
extObj中的w就失效。
 就会被替换,
支持(0) 反对(0) ruanmou | 园豆:5 (初学一级) | 2017-02-09 14:33

@ruanmou: t[i] = $.extend({},extObj,j);这样就可以,不会改变extObj结构

支持(0) 反对(0) [3] | 园豆:1174 (小虾三级) | 2017-02-09 14:42

@一寸時光: 

这里运行extend方法是可以的,
如果换做其他的方法,比如Math.***,比如自己定义的,都不行,最后都是一个值。

我想知道这是为何?

 如果解决这个问题?

在项目中很多要遍历对象,这个对象是不固定的,然后又要给一个默认值,按照普通的方法去做,就是这个对象的每个键的值都是一样的,都是最后一个。

支持(0) 反对(0) ruanmou | 园豆:5 (初学一级) | 2017-02-09 15:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册