此方法借助Object.defineProperty进行数据劫持,利用了对象属性描述符中的存取描述符实现的数据双向绑定:
<body>
<div class="content">
<input type="text" name="txt" id="txt" value="" />
<h1 id="h1"></h1>
</div>
</body>
window.onload = ()=> {
const obj = {};
Object.defineProperty(obj,'text',{
get(){
return text
},
set(newVal){
document.getElementById('txt').value = newVal;
document.getElementById('h1').innerHTML = newVal;
}
});
let inp = document.getElementById('txt');
inp.addEventListener('keyup',(e)=>{
obj.text = e.target.value;
})
}
注:set 给属性提供 setter 的方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新的参数值。