收藏
回答

Page 自定义属性无法清空

问题模块 框架类型 问题类型 终端类型 微信版本 基础库版本
框架 小程序 Bug 工具 6.7.2 2.4.2

- 当前 Bug 的表现(可附上截图)

    在data属性的同级目录定义一个一样的属性myProperty,然后在里面使用对象初始化,发现即便在unload里将该属性中的内容清空,第二次加载还是会出现清空前的内容(下图中标志位置,应该是初始值,不应该是修改置)


- 预期表现

页面已经销毁后,第二次加载,不应该保留上次的内容

- 复现路径

1 点击代码片段的跳转按钮,跳转到index2页面

2 点击返回按钮

3 点击代码片段的跳转按钮,跳转到index2页面

4 问题出现


- 提供一个最简复现 Demo

https://developers.weixin.qq.com/s/TCahlsmD7n4i


最后一次编辑于  2018-12-06  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • 海子
    海子
    2018-12-06

    问题已经大致想明白了把代码分解一下

    var p = {

    xxxx

    myProperty:{

        info:myObj

    }

    data:{

     xxxx

    }


    }

    Page(p)

    其实p就是一个全局变量,p参数传给Page后,Page会复制一份(浅复制),所以如果第一次修改myObj里面的值后,p也跟着改了,第二次再初始化相当于用了修改后的p作为参数(就是对象一样,只是对象里面引用的对象里的值改变了)

    当然还有个推断结果,发现data应该是深度复制的,因为上面的info如果放到data里是没问题的






    2018-12-06
    赞同
    回复
  • 黑白埋
    黑白埋
    2018-12-06

    Page() 只在register时候初始化你的 myProperty 就一次,你就当做单例模式来看吧

    2018-12-06
    赞同
    回复
  • 管凯旋
    管凯旋
    2018-12-06

    跟前两天霄霄大神教育我的差不多

    var a = {value:1}

    console.log(a)

    a.value=2


    2018-12-06
    赞同
    回复 7
    • ==
      ==
      2018-12-06

      啃js基础的我看到这个    顿时觉得有伴了

      2018-12-06
      回复
    • 海子
      海子
      2018-12-06

      请仔细看问题,不是你说的这种情况

      2018-12-06
      回复
    • 管凯旋
      管凯旋
      2018-12-06回复海子

      把第一次初始数据点开,其实那也是修改值。。

      2018-12-06
      回复
    • 海子
      海子
      2018-12-06回复管凯旋

      没说第一次点开有问题啊,在load开始就打日志,是为了演示第二次的问题,


      第二次还保留的第一次的值,而且无论如何清空都清除不了,这才是我的问题

      2018-12-06
      回复
    • 管凯旋
      管凯旋
      2018-12-06回复海子

      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)

      },


      2018-12-06
      回复
    查看更多(2)