getCurrentPages使用问题 及 setData() 函数问题?
发布于 7 年前 作者 blin 5049 次浏览 来自 官方Issues

如下:

页面A :

data: {

    goodslist:[1,2,3,4]

}

页面B:

data: {

    gdlist:[]

}

onLoad: function(){

    var page = util.getPrevPage();//这个函数不做说明,反正可以获取到页面A

this.setData({

        gdlist: page.data.goodslist,

});

//问题来了:

this.setData({

‘gdlist[0]’:10000

})

这个时候会发现不但页面B 的gdlist 的值更改了,页面A的goodslist的值也改了。

但如果这样:

this.setData({

gdlist:[10000,2,3,4]

})

这种只更新页面B的gdlist

}

在开发工具里 iphone 5 6 7 … 所有的都试过 一样。手机 iphone 6 微信版本 7.0.5 试过也是一样的。

1 回复

原因是这样:

this.setData({

        gdlist: page.data.goodslist,

});

因为数组(对象)是引用数据类型,你把A页面的地址和值都赋给了B页面的gdlist字段;当你

this.setData({

'gdlist[0]':10000

})时,其实只是在这个地址中修改了第0项属性的值,由于gdlist, goodslist公用一个引用地址,所以两边都改变了。

当你

this.setData({

gdlist:[10000,2,3,4]

})时,[10000,2,3,4]是一个新的数组,有自己的引用地址,赋值后相当于直接改变了字段gdlist的引用地址,直接指向[10000,2,3,4]这个数组的引用,而goodslist依然指向原来的引用地址

回到顶部