起因:我在页面实例中使用this.$data = { aa: 1}方式定义了$data属性,然后通过Object.defineProperty修改了this.$data对象中属性的描述符
Object.defineProperty(this.$data, 'aa', {
enumerable: true,
configurable: true,
get() { return value; },
set (newVal) { value = newVal }
});
但在某些情况下跳转其他页面再返回后,这些通过Object.defineProperty定义的属性描述符都消失了,导致代码无法劫持属性的getter和setter。
进一步验证:
Object.defineProperty(this, '$data', {
enumerable: true,
value: {}})
此时在跳转时会报错:
综上可以确认小程序底层有修改或拷贝自定义实例属性的行为。想问下这里是小程序底层的bug吗?如果是,有修复计划吗。如果不是麻烦告知下什么情况下会有修改行为,我看看能否自行规避,感谢!
麻烦提供能复现问题的代码片段,thanks(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)