数据劫持升级版
基本写法
- 每次只能劫持一个属性和属性值 效率以及 方法过于笨拙
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)