Object.defineProperty
const person = {
name: 'jp',
age: 18,
info: {
city: 'xi,an',
money: Infinity
}
}
function observe (obj) {
if (obj && typeof obj === 'object' && obj !== null) {
Object.keys(obj).forEach(key => {
let value =obj[key]
observe(value)
Object.defineProperty(obj, key, {
get () {
console.log(`获取了${key}`)
return value
},
set (val) {
console.log(`修改了${key}`)
value = val
observe(value)
}
})
})
}
}
observe(person)
console.log(person)
person.info.city = 'beiJing'
ES6 Proxy
const arr = [1, 2, 3, 45, { name: 'gg', age: 18 }]
let proxy = new Proxy(arr,{
get (target, prop) {
console.log(`获取了${prop}的值`)
return target[prop]
},
set (target, prop, value) {
console.log(`修改了${prop}的值`)
target[prop] = value
return true
}
})
proxy[4].name = 'xx'
proxy[6] = {
city: 'xi,an'
}