javascript用defineProperty实现简单的双向绑定方法

  

  

对象提供的方法,用于给对象添加自定义属性具体用法如下:

        const obj={_value: 1};      Object.defineProperty (obj,“价值”,{   得到:函数(){   console.log(“方法执行”);   返回this._value;   },   设置:函数(){   console.log(“集方法执行”);   这一点。_value=https://www.yisu.com/zixun/a;   }   })   obj。值=3;   console.log (obj.value);   console.log (obj._value);      

在节点中执行结果如下:

  

 javascript用defineProperty实现简单的双向绑定方法

  

下面来分析一下代码
  首先定一个对象,并对对象添加一个自定义属性价值,同时添加了getter、setter两个函数用来分别控制属价值性的修改和获取,
  当执行<代码> obj。值=https://www.yisu.com/zixun/3;> obj.value 语句获取属性值时,会自动调用getter方法获取方法的返回值;

  

<强> 总结 (参考MDN)
  该方法接收三个参数
  obj:要添加属性的对象
  道具:要定义的属性
  描述符:要定义或者修改的属性描述符
  其中描述符包含以下几种

  

1.可配置:布尔值,控制属性是否能改变(除了价值,可写)及删除
  2.可列举的:布尔值,控制属性是否可枚举,即通过在循环或者对象。键访问
  3.价值:属性值,可以时任何有效JavaScript值
  4.可写的布尔值,属性可否通过赋值修改
  5.得到:属性getter函数,执行时传入,这个值取决于调用者
  6.设置:属性setter函数,赋值时执行,并传入这
  

  

  

由此可以设计一下数据双向绑定的简单实现:
  在数据对象内定义属性,通过对dom绑定事件监听dom内值的变化,并赋值给数据对象、数据对象的改动会调用自身的setter方法,在方法内在动态修改dom内容。

  

代码如下:

        & lt; !——简单数据双向绑定实现——比;   & lt; !DOCTYPE html>   & lt; html>   & lt; head>   & lt;元charset=皍tf - 8”比;   & lt;/head>   & lt; body>   & lt; div id=案北?   & lt;按钮id=癰tn”祝辞请求数据& lt;/button>   & lt;/div>   & lt;/body>   & lt; script>   const根=. getelementbyid(“根”);   const btn=. getelementbyid (btn);   常量输入=document.createElement(“输入”);   const模型=document.createElement (“p”);   const dataModel={   _value: 0,   }   Object.defineProperty (dataModel,“价值”,{   可配置:没错,   设置:函数(值){   这一点。_value=https://www.yisu.com/zixun/value;   输入。值=价值;   模型。innerHTML=' 数据模型: $ {value} ';   },   得到:函数(){   返回this._value;   }   })      btn。addEventListener(“点击”,()=比;{   常量范围=Math.floor(数学。随机(0,1)* 100);   dataModel。值=https://www.yisu.com/zixun/range;   })      input.addEventListener(“输入”(ev)=比;{   dataModel。值=https://www.yisu.com/zixun/ev.target.value;   })      const initPage=()=> {   dataModel。值=100;   }   initPage ();   root.append(输入);   root.append(模型);>      

描述有点乱,看实现代码更清晰一点,有问题欢迎指正

  

到此这篇关于javascript用defineProperty实现简单的双向绑定方法的文章就介绍到这了,更多相关javascript defineProperty双向绑定内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

javascript用defineProperty实现简单的双向绑定方法