文章参考 关于Vue的MVVM
Object.defineProperty用于实现数据劫持,在对象数据改变的时候去改变DOM的值 addEventListener用于DOM监听,当DOM值发生改变的时候,动态改变对象的值 这样就可以简单的实现MVVM数据双向绑定 代码如下
<html> <body> <form id="form"> 姓名:<input type="text" id="name"><br/> 年齡:<input type="text" id="age"> </form> <script> let person = { _data : { name : "", age : "" } }; let form = document.querySelector("#form"); for(let key in person._data){ bind(person,key) } function bind(object,key){ let dom = document.querySelector("#"+key) Object.defineProperty(object,key,{ get() { console.log(key + "備獲取了"); return object._data[key] }, set(v) { console.log(key + "被修改為"+v,person); dom.value = v; object._data[key] = v; } }) } form.addEventListener("input",(e) =>{ let value = e.target.value; let name = e.target.getAttribute("id"); person[name] = value; }); function init(){ person["name"] = "zzq"; person["age"] = "100"; } init(); </script> </body> </html>