<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="div1" class="container">
<p>vDom</p>
<ul style="font-size:20px">
<li>a</li>
</ul>
</div>
<script>
function updateView(){
console.log('视图更新')
}
function defineReactive(target,key,value){
observer(value)
Object.defineProperty(target, key , {
get() {
return value
},
set(newVlue){
observer(newVlue)
if(newVlue !== value) {
value = newVlue
updateView()
}
}
})
}
function observer(target){
if(typeof target !== 'object' || typeof target === null) {
return target
}
for(let key in target) {
defineReactive(target, key, target[key])
}
}
const data = {
name: 'achu',
age: 20,
info:{
num:1
}
}
observer(data)
data.name = 'shizhiwen'
data.age = { num: 1}
data.age.num = 22
data.info.num = 33
</script>
</body>
</html>