【JS】数据双向绑定原理

数据双向绑定原理

<body>
	<div id="demo"></div>
	<input type="text" id="inp">

<script>
	let obj2={};
	let demo=document.querySelector("#demo")
	let inp=document.querySelector("#inp")

	Object.defineProperty(obj2,"name",{
		get:function () {
			return ;
		},
		set:function (newVal) {
			inp.value=newVal;
			demo.innerHTML=newVal;
		}
	})

	inp.addEventListener("input",function (e) {
		obj2.name=e.target.value;
	})

	obj2.name="lmy";


/*
	双向数据绑定原理:Object.defineProperty(),会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回该对象

		语法:
			Object.defineProperty(obj,prop,descriptor)

			参数:
				obj:要定义属性的对象
				prop:要定义的属性名称
				descriptor:描述符,通常设置为一个对象,默认包含一些属性和方法
							{
								configurable:false(默认)
								enumerable:false(默认)
								value:undefined(默认)
								writable:false(默认)

								get:undefined(默认),可选
								set:undefined(默认),可选
							}
*/


	//writable(可改写)
	const object1={};
	// object1.name="lmy"(从前的添加属性方式)
	Object.defineProperty(object1,"property1",{
		value:42,
		writable:false, //false时,value不能被赋值
	})

	console.log(object1.property1); //42
	object1.property1=72; //尝试重新赋值
	console.log(object1.property1); //赋值不成功



	//enumerable(可枚举)
	const object2={};
	Object.defineProperty(object2,"property2",{
		value:42,
		writable:true,
		enumerable:false, //false时,属性不可枚举
	})

	console.log(object2)
	console.log(object2.property2)
	let obj={
		name:"月月"
	}

	for(let i in object2){
		//这个属性是否允许被找出来
		console.log(i,object2[i])
	}



	//get、set(使用get和set时不能同时使用value或者writable会报错)
	const object3={};
	Object.defineProperty(object3,"property3",{
		get:function () {
			console.log("感应到正在获取属性property3")
		},
		set:function () {
			console.log("感应到正在设置属性property3")
		}
	})

	object3.property3=33;
	let val=object3.property3;


</script>
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值