手写 shallowReadonly 与 readonly
admin
2024-04-01 22:31:49
0

//就是在set那里设置不改变原来的数据,直接return
        const readonlyHandler = {
          get (target, key) {
            if (key==='_is_readonly') return true
        
            return Reflect.get(target, key)
          },
        
          set () {
            console.warn('只读的, 不能修改')
            return true
          },
        
          deleteProperty () {
            console.warn('只读的, 不能删除')
            return true
          },
        }
        
        /* 
        自定义shallowReadonly
        */
        function shallowReadonly(obj) {
          return new Proxy(obj, readonlyHandler)
        }
        
        /* 
        自定义readonly
        */
        function readonly(target) {
          if (target && typeof target==='object') {
            if (target instanceof Array) { 
                // 应为数组里面可能有引用类型数据所以要便利
              target.forEach((item, index) => {
                target[index] = readonly(item)
              })
            } else { // 对象也如此
              Object.keys(target).forEach(key => {
                target[key] = readonly(target[key])
              })
            }
            const proxy = new Proxy(target, readonlyHandler)
        
            return proxy 
          }
        
          return target
        }
        
        /* 测试自定义readonly */
        /* 测试自定义shallowReadonly */
        const objReadOnly = readonly({
          a: {
            b: 1
          }
        })
        const objReadOnly2 = shallowReadonly({
          a: {
            b: 1
          }
        })
        
        objReadOnly.a = 1
        objReadOnly.a.b = 2
        objReadOnly2.a = 1
        objReadOnly2.a.b = 2

相关内容

热门资讯

北方华创,巨额商誉压力突然高悬... 文丨詹詹编辑丨百进来源丨新商悟(本文约为 1300字)当国内半导体设备龙头北方华创交出一份“营收创历...
长城华西银行原女掌门已回老东家... 湘财Plus注意到,四川银行入主长城华西银行后,该行核心管理人员调整基本落定,法定代表人已正式变更为...
立案,跌停!这家“童年记忆”,... 沉浮多年,方向何在?最近被立案的上市公司,着实有些多,就在上周末,又有一家上市公司及原董事长被立案调...
加码生态环境监测!生态环境部:... 本文来源:时代周报 作者:李杭4月27日,生态环境部举行4月例行新闻发布会。 生态环境部4月例行新...
东方甄选主播“离职潮”持续发酵... 红星资本局4月27日消息,东方甄选(01797.HK)主播“离职潮”事件仍在发酵。在社交平台上,有部...
SpaceX万亿IPO前夜:马... 从20亿美元收购,到万亿IPO前的最后叙事。2026年4月23日深夜,特斯拉向SEC提交了一份季报文...
前董事长陆宏达“闪电辞职”牵扯... 紧急澄清前董事长性侵指控后,智度股份仍难挡股价大跌。4月27日,智度股份早盘一度重挫逾9%,逼近6....
高盛:一场全球性化工危机正在爆... 霍尔木兹海峡通行受阻,正在引发一场史无前例的全球化工供应冲击。高盛最新报告表示,基础化工品价格近几周...
这笔400亿,谷歌买的不是友谊... 4月25日,Anthropic宣布谷歌将向其投资最高400亿美元——先期注入100亿美元现金,估值3...
粪坑,爬出来了 粪坑,爬出来了... 图:Simon Bailly 读者说:“有人发现吗?2019年蚂蚁的大热基金鹏华快回本了,当年最高回...