let data = {
user_name: 'tom',
age: 19,
info: {}
}
observer(data)
data.info = {
sex: 'M',
height: 170
}
data.info.height = 185
function observer(obj) {
if (typeof obj !== 'object' || typeof obj == null) return
for (const key in obj) {
defineProperty(obj, key, obj[key])
}
}
function defineProperty(obj, key, value) {
observer(value)
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function () {
console.log('触发了getter')
return value
},
set: function (newVal) {
value = newVal
observer(newVal)
runderHtml()
console.log('触发了setter')
}
})
}
function runderHtml() {
let p = document.querySelector('#p')
p.innerHTML = data.user_name
}