js实现双向数据绑定,vue v-model原理
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<div>
<div id="content"></div>
<input type="text" name="" id="inputName">
</div>
</body>
<script>
let obj = {
name: ''
}
let newObj = JSON.parse(JSON.stringify(obj))
Object.defineProperty(obj,'name',{
get() {
return newObj.name
},
set(val) {
if(val === newObj.name) return
newObj.name = val
observer()
}
})
function observer() {
content.innerHTML = newObj.name
inputName.value = newObj.name
}
setTimeout(() => {
obj.name = '测试数据'
},1000)
inputName.oninput = function() {
obj.name = this.value
}
</script>
</html>