龙空技术网

原生JS实现双向绑定

小屹的喵生活 478

前言:

此刻小伙伴们对“js参数绑定”都比较着重,看官们都需要剖析一些“js参数绑定”的相关知识。那么小编也在网摘上网罗了一些有关“js参数绑定””的相关文章,希望你们能喜欢,兄弟们快快来了解一下吧!

本文来自我的小伙伴小帅,从JS基础出发一起学习JS,全网首发

对象的属性分为:数据属性和访问器属性。如果要修改对象的默认特性,必须使用Object.defineProperty方法,它接收三个参数:属性所在的对象、属性的名字、一个描述符对象。

下面是MDN上面的解释:

数据属性:

数据属性包含一个数据值的位置,在这个位置可以读取和写入值,数据属性有4个描述其行为的特性。

· Configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认值为true。

· Enumberable:表示能否通过for-in循环返回属性。默认值为true。

· Writable:表示能否修改属性的值。默认值为true。

· Value:包含这个属性的数据值。读取属性值的时候,从这个位置读;定稿属性值的时候,把新值保存在这个位置。默认值为true。

访问器属性:

访问器属性不包含数据值;它们包含一对getter、setter函数(两个函数不是必须的)。在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据。访问器属性有如下4个特性。

· Configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。默认值为true。

· Enumerable:表示能否通过for-in循环返回属性。默认值为true。

· Get:在读取属性时调用的函数。默认值为undefined。

· Set:在写入属性时调用的函数。默认值为undefined。

利用访问器属性实现简单的数据双向绑定

<!DOCTYPE html><html lang="en">  <head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>  </head>  <body>    <input type="text" id="input">    <div id="innerText"></div>    <script>    	let obj = {          name:'小帅',          age:'22'        }        const input = document.getElementById('input');        const text = document.getElementById('innerText');        Object.defineProperty(obj,'nickName',{            configurable:true,            enumerable:true,            get: function() {              console.log('触发get')              console.log(obj)              return input.value            },            set: function(val) {              console.log('触发set')              console.log(val)              text.innerHTML = val              input.value = val            }        })        // console.log(obj)      input.addEventListener('keyup', function(e){        console.log(e.target.value)          obj.nickName = e.target.value;      });      document.getElementById('innerText').innerHTML =  obj.name    </script>  </body></html>

Input输入内容, div的内容也会随着改变

手动修改对象obj也会 同步到input和div的内容

标签: #js参数绑定