小程序setData 常量(behaviors)

本文探讨了在小程序开发中遇到的常量变为变量的问题,由于 setData 的使用导致常量不再不可变。为了解决这个问题,作者提出通过hook setData 的方法,并利用 behaviors 在每个页面注入钩子代码。这样可以确保常量在初始设置后无法被直接或通过 setData 修改,以此达到保护常量的目的。属性描述符的概念在此解决方案中起着关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是个啥问题呢。就是你写代码不是会有一堆常量吗,希望是不可被更改的,但是呢,小程序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)
        }
    }
})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值