javascript - js用Object.defineProperty做双向数据绑定小问题

查看:119
本文介绍了javascript - js用Object.defineProperty做双向数据绑定小问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我在网上看到的例子:

<input type="text" id="text1" />
<input type="text" id="text2" />



var input1 = document.querySelector("#text1");
var input2 = document.querySelector("#text2");
var data = {};
Object.defineProperty(data, "name", {
  configurable: true,
  get: function(){
      console.log(1111);
      return input1.value
  },
  set: function(newValue){
      console.log(222);
    input1.value = newValue;
    input2.value = newValue;
  }
})
data.name = "sss";
input1.onchange = function(){
  console.log(33333)
  data.name = data.name;
}
input2.onchange = function(){
  input1.value = this.value;
  console.log(data);
}

当我改变input2的值的时候。input1的value会发生变化,这是必然的。但是这时候我打印data。data值竟然也更新了。input2.onchange里 并没有调用data的set啊。input1.value发生改变,也并没有触发input1的onchange啊。那 data的数据的更新,到底是怎么触发的啊?

解决方案

楼主沫鸡冻;

当我改变input2的值的时候。input1的value会发生变化,这是必然的。

这个时候输出data.name;其实执行的是get方法,也就是输出input1的值。。。

这篇关于javascript - js用Object.defineProperty做双向数据绑定小问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆