<!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>
<input type="text" id="input" />
<p id="p"></p>
</body>
<script>
let input = document.getElementById("input");
let p = document.getElementById("p");
var obj={}
Object.defineProperty(obj,'name',{
get:function(){
return val
},
set:function(val){
console.log('我被访问了');
input.value=val
p.innerHTML=val
}
})
input.addEventListener("input", function (e) {
obj.name=e.target.value
});
</script>
</html>
实现的思路:
1.通过input事件监听输入框的值变化,并且赋值给劫持的obj.name属性
2.通过set函数获取到改变的值,形成了双向绑定
get的访问时机
代码:
const obj={}
let v=null
Object.defineProperty(obj,'a',{
get:function(){
// console.log('我被读取了');
return 123
},
set:function(){} //赋值触发
})
console.log(obj.a); //读取触发
当有人访问了劫持的属性,就会触发get函数。
如果没有返回值则返回的是underfined
总结:
get:读取的时候触发,没有返回值默认返回underfined
set:赋值的时候触发