数据劫持升级版

82 阅读1分钟

数据劫持升级版

基本写法

  • 每次只能劫持一个属性和属性值 效率以及 方法过于笨拙
 const obj = {
            name: 'QF001',
            age: 18
        }
        const res = {}
        基本写法
        Object.defineProperty(res, 'name', {
            get() {
                return obj.name
            },
            set(val) {
                obj.name = val
            }
        })

利用对象的for ... in 循环遍历 原始数组 进行 数据劫持

  const obj = {
            name: '张三',
            age: 18,
            sex: '男',
            classRoom:'三年一班'
        }
       
        const res = {}

        劫持数据 
        for(let k in obj){
            Object.defineProperty( res, k,{
                get(){
                    return obj[k]
                },
                set(val){
                   obj[k] =val
                }
            }) 
        }
           console.log(res)

将对象中的 k 写到 配置项 中 []包裹 不然 js 会把 键名 识别成字符串 所以可以写成 [k], 将他识别为变量

   数据劫持 升级版(pius)
           for(let k in obj){
             Object.defineProperties(res,{
                [k]:{
                    get(){
                        return obj[k]
                    },
                    set(val){
                        obj[k] = val
                    }
                }
             })
           }
            console.log(res)
 

数据劫持 自己劫持自己


   for(let k in obj){
                Object.defineProperties(obj,{
                   ['_'+k]:{                //我在我这个对象内把所有属性复制一份, 放在自己这个对象内部
                       value:obj[k],
                       writable: true,
                   [k]:{
                    get(){
                        return obj['_'+k]
                    },
                    set(val){
                        obj['_'+k] = val
                    }
                   }
                   } 
                })
             }
             console.log(obj)