<script>
const obj = {
name: 'xjt',
//嵌套对象obj2
obj2: {
name2: 'xjt2'
}
//封装 Object.defineProperty()
function defineReactive(target, key, val) {
Object.defineProperty(target, key, {
get() {
console.log('get:name属性被读取了');
return val
},
set(newValue) {
console.log('set:name属性被改变了');
if (val === newValue) {
return
}
val = newValue
}
})
}
defineReactive(obj.obj2, 'name2', 'xjt000')
console.log(obj.obj2.name2); //get:name属性被读取了 //xjt000
//测试结果:obj.obj2的name2属性可以被监听,因此可以通过递归方式对嵌套对象的属性进行数据劫持
</script>