实现一个双向绑定

文章原文:各种源码实现

1.defineProperty 版本

//数据
const data  =  {
  text:'default'
};
const input = document.getElementById('input');
const span = document.getElementById('span');
//数据劫持
Object.defineProperty(data, 'text', {
  //数据变化 -->修改视图
  set(newVal) {
    input.value = newVal;
    span.innerHTML = newVal;
  }
});

//视图更改  --> 数据变化
input.addEventListener('keyup', function(e) {
  data.text = e.target.value
})

2.proxy 版本

//数据
const data = {
  text:'default'
};
const input = document.getElementById('input');
const span = document.getElementById('span');
//数据劫持
const handler = {
  set(target, key, value) {
    terget[key] = value;
    //数据变化 --> 修改视图
    input.value = value;
    span.innerHTML = value;
    return value;
  }
};
const proxy = new Proxy(data, handler);

//视图更改   --> 数据变化
input.addEventListener('keyup',function(e) {
   proxy.text = e.target.value;
})
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容