这是个啥问题呢。就是你写代码不是会有一堆常量吗,希望是不可被更改的,但是呢,小程序html要用得要通过setData。但是经过他之后什么常量都变成变量了。。。我们不希望这样。我们希望如果源头是常量,第一次setData没问题,但是设置好之后,无论是直接修改或者通过setData修改都应该报错,
办法么就是hooksetData。但是吧这个函数和wx.xxx console.xx还不一样。他是page初始化之后才有的,而且是每个页面都独立的。。所以吗我们要用behaviors,把我们的hook代码注入到每一个page里,至于hook成啥样呢,就是考本整个完整的属性描述符就行了。属性描述符我之前的文章关于js继承有讲
function copyProperty(des, src) {
for(let key in src){
if((typeof des[key] != "undefined") && (typeof des[key] == typeof src[key]))
switch (typeof typeof src[key]) {
case "bigint":
case "boolean":
case "number":
case "string":
Object.defineProperty(des, key, Object.getOwnPropertyDescriptor(src, key))
break
case "object":
copyProperty(des[key], src[key])
default:
break
}
}
}
import {copyProperty} from "./Property";
const PageHookBehaviors = Behavior({
data: {
},
methods: {
setData(obj, fnc) {
this.__proto__.__proto__.setData.call(this, obj, fnc)
copyProperty(this.data, obj)
}
}
})