- 当前 Bug 的表现(可附上截图)
在data属性的同级目录定义一个一样的属性myProperty,然后在里面使用对象初始化,发现即便在unload里将该属性中的内容清空,第二次加载还是会出现清空前的内容(下图中标志位置,应该是初始值,不应该是修改置)
- 预期表现
页面已经销毁后,第二次加载,不应该保留上次的内容
- 复现路径
1 点击代码片段的跳转按钮,跳转到index2页面
2 点击返回按钮
3 点击代码片段的跳转按钮,跳转到index2页面
4 问题出现
- 提供一个最简复现 Demo
https://developers.weixin.qq.com/s/TCahlsmD7n4i
问题已经大致想明白了把代码分解一下
var p = {
xxxx
myProperty:{
info:myObj
}
data:{
xxxx
}
}
Page(p)
其实p就是一个全局变量,p参数传给Page后,Page会复制一份(浅复制),所以如果第一次修改myObj里面的值后,p也跟着改了,第二次再初始化相当于用了修改后的p作为参数(就是对象一样,只是对象里面引用的对象里的值改变了)
当然还有个推断结果,发现data应该是深度复制的,因为上面的info如果放到data里是没问题的
Page() 只在register时候初始化你的 myProperty 就一次,你就当做单例模式来看吧
跟前两天霄霄大神教育我的差不多
var a = {value:1}
console.log(a)
a.value=2
啃js基础的我看到这个 顿时觉得有伴了
请仔细看问题,不是你说的这种情况
把第一次初始数据点开,其实那也是修改值。。
没说第一次点开有问题啊,在load开始就打日志,是为了演示第二次的问题,
第二次还保留的第一次的值,而且无论如何清空都清除不了,这才是我的问题
onLoad: function () {
console.log("onload初始数据:",this.myProperty.info1, this.myProperty.info2)
this.myProperty.info1={};
this.myProperty.info1.str = "info1修改值"
var inf = new info()
inf.str = "info2修改值"
this.myProperty.info2 = inf
console.log("修改的数据:", this.myProperty.info1, this.myProperty.info2)
},