手写一个简单的双向数据绑定

 姓名:<span id="spanName" ></span>

<br>     

<input type="text" id='inputName'/> 

1.es5  Object.defineProperty

        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() {

            spanName.innerHTML = obj.name

            inputName.value = obj.name

        }

         setTimeout(() => {

                obj.name = '999'

            }, 1000);

        inputName.oninput=function(){

           obj.name = this.value 

        }



2.es6 Proxy

 let obj = {}

        obj = new Proxy(obj, {

            get(target, prop) {

                return target[prop]

            },

            set(target, prop, value) {

                target[prop] = value

                observer()

            }

        })

        function observer() {

            spanName.innerHTML = obj.name

            inputName.value = obj.name

        }

        setTimeout(() => {

            obj.name = '999'

        }, 1000);

        inputName.oninput = function () {

            obj.name = this.value

        }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。