我们先认识一下Object.defineProperty
认识Object.defineProperty
再根据它写一个简单版的双向绑定,接着开始分析,分析都在注释里
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue双向绑定原理</title>
</head>
<body>
<h1>vue双向绑定原理</h1>
<input type="text" id="_txt">
<p id="p_id"></p>
</body>
<script>
//声明一个对象
let Person = {}
//给对象添加一个属性
Object.defineProperty(Person,'name',{
get() {
console.log('getgetget')
return 'gggg'
},
set(v) {
//3.这里就是给input框和p标签绑定值的步骤,这样就实现了双向绑定
document.getElementById('_txt').value = v
document.getElementById('p_id').innerHTML = v
console.log(v)
}
})
//写入时触发set
Person.name = '000'
//读取时触发get
console.log(Person.name)
//1.给键盘绑定一下监听,可以打印e看一下,找到我们输入的值的位置
//2.那么这一步就可以理解何曾写入触发的set,那么那个v就是我们传入的值,
document.addEventListener('keyup',function (e) {
// console.log(e.target.value)将对象的属性赋值
Person.name = e.target.value
})
</script>
</html>
说的高大上一点就是: