vue项目——双向数据绑定原理/Object.defineProperty()函数

1.Object.defineProperty()函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue双向数据绑定原理</title>
</head>
<body>
    <input type="text" id="userName">
    <br>
    <span id="uName"></span>

    <script>	

      var obj = {
        pwd:"123456"  // 2. 直接在这里给obj添加新属性
      };
      Object.defineProperty(obj,"userName",{ // 1. 给obj拓展一个新的属性 (Object.definePropert有拓展属性的能力)
        value:"Jack"
      });

		
    </script>

</body>
	
</html>

介绍一下Object.defineProperty()函数有拓展对象属性的能力。

在控制台中可看到两种方法都可以为 obj 对象添加属性

控制台打印obj

2.input监听数据变化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue双向数据绑定原理</title>
</head>
<body>
    <input type="text" id="userName">
    <br>
    <span id="uName"></span>
    <script>

      document.getElementById("userName").addEventListener("keyup",function(event){
         document.getElementById("uName").innerText = event.target.value;
	  })
		
    </script>
</body>
	
</html>

在input输入框中输入时可看到:input

这个可以通过input监听数据变化,但是需要添加keyup事件去监听,要不然就不知道用户发生了改变

3.vue双向数据绑定关键

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue双向数据绑定原理</title>
</head>
<body>
    <input type="text" id="userName">
    <br>
    <span id="uName"></span>
    <script>

      var obj = {
         pwd:"123456"   // 2. 直接在这里给obj添加新属性
	  };

	  Object.defineProperty(obj,"userName",{  // 1. 给obj拓展一个新的属性 
            get:function(){
              console.log("get init")
	        },
            set:function(){
              console.log("set init")
            }
	  });	

    </script>
</body>
</html>

可看到在下图中,为obj的userName属性重新赋值的时候,触发了set init;获取obj的userName属性的时候

触发了set init。

在代码中再更改一些:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
	<title>Vue双向数据绑定原理</title>
</head>
<body>
    <input type="text" id="userName">
	<br>  
    <span id="uName"></span>
	<script>

        var obj = {
          pwd:"123456"  // 2. 直接在这里给obj添加新属性
        };
        Object.defineProperty(obj,"userName",{ // 1. 给obj拓展一个新的属性 
         get:function(){
           console.log("get init")
		 },
         set:function(val){
           console.log("set init")
           document.getElementById("uName").innerText = val;
           document.getElementById("userName").value = val;
		}
		});
	
        document.getElementById("userName").addEventListener("keyup",function(event){
		  obj.userName = event.target.value;
	    })
		
	</script>
</body>
</html>

在控制台中更改userName属性后,input上的值和span中的值同时出现了

这是vue中双向数据绑定的关键!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值