如下:
页面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 试过也是一样的。
原因是这样:
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依然指向原来的引用地址
不要在
App.onLaunch
的时候调用getCurrentPages()
,此时page
还没有生成。文档里说的很清楚了