16、前端知识点--Object.defineProperty 的用法+双向数据绑定原理解析

一、Object.defineProperty 的用法

  Object.defineProperty 可以用于给对象添加更新属性。

<script>
  // Object.defineProperty可以用于给对象添加或更新属性。
  // 它里面有下面三个参数: 给设置属性的对象、设置属性的属性名、以及设置的配置项
  // 先声明的一个对象
  var obj = {}
  Object.defineProperty(obj,"name",{

    // 这个配置项里面有两个函数,分别是getter函数 和 setter函数
    //getter函数
    get(){
      console.log(‘获取的值是:‘,name)  // 相当于  obj.name
      // get函数里面必须有一个return,将这个属性返回出去
      return name
    },

    //setter函数,这个函数包含一个参数,这个参数表示给当前这个属性设置的新的值,例如obj.name = newName  这样
    set(newName){
      name = newName
      console.log(‘这里给name传递的新的值是:‘,name)
    }
  })

</script>

二、模拟双向数据绑定

    <!-- 模拟一个双向数据绑定 -->
    <input type="text " id="myinput">
    <h1 id="myh"></h1>
<script>
  //先声明一个对象
  let obj = {}
  //利用Object.defineProperty()来从后台设置改变页面的值
  Object.defineProperty(obj,‘name‘,{
    get(){
      return name
    },
    set(newName){
      // 给属性赋值
      name = newName
      // 将后台设置的值在前台页面展示出来
      document.getElementById(‘myh‘).innerText = newName

      //上面是展示了H1标签的内容了,下面也要让输入框的内容同步展示,即手动改变obj.name的值时,要把改变后的值赋给输入框
      document.getElementById(‘myinput‘).value = newName
    }
  })

  // 下面是获取输入的值
  // 给input绑定input的事件,
  document.getElementById(‘myinput‘).addEventListener(‘input‘,function(e){
    // 当页面输入时,在控制台就会同一时间打印出来,利用下面这句
    // console.log(e.target.value)
    // 将输入的值赋给对象的属性
    obj.name = e.target.value
  })

</script>

双向数据绑定:就是页面视图的输入发生变化,后台的数据会随着改变。

原文地址:https://www.cnblogs.com/jianguo221/p/11784759.html

时间: 2024-11-07 20:12:04

16、前端知识点--Object.defineProperty 的用法+双向数据绑定原理解析的相关文章

vue中实现双向数据绑定原理,使用了Object.defineproperty()方法,方法简单

在vue中双向数据绑定原理,我们一般都是用v-model来实现的 ,但一般在面试话会问到其实现的原理, 方法比较简单,就是利用了es5中的一个方法.Object.defineproperty(),它有三个参数, Object.defineproperty(obj,'val',attrObject), 参数1: obj是属性所在的对象,参数2: 'val',属性名,它是一个string类型,参数3: {}属性所描述的对象 详情可以看Object.defineproperty的文档 下面直接上dem

vue双向数据绑定原理探究(附demo)

昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与UI层的同步,数据再两者之间的任一者发生变化时都会同步更新到另一者. 双向绑定的一些方法 目前,前端实现数据双向数据绑定的方法大致有以下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定.所有绑定起来的JavaScript对象以及DOM元

vue和angular双向数据绑定原理

都是视图和数据的双向传递: angular双向数据绑定原理: 就是通过脏值检测的方式判断数据是否有变更: 当数据中的值改变的化,就会到$degiest(是vue内部的方法)中循环查找,当值不改变了,就会把数据显示到视图中: vue双向数据绑定原理: 数据劫持,使用ES5的Object.definpropoty() 方法监控的数据,数据的读取使用的是setter和getter,用于视图和数据的同步绑定:

JavaScript使用Object.defineProperty方法实现双数据绑定

Object.defineProperty这个方法非常值得学习,很多mvc框架中的双向数据绑定就是通过它来实现的. 本着互联网分享精神,今天我就将我自己的见解分享给大家,希望能有所帮助. 开始使用 Object.defineProperty接收三个参数 *  目标对象 *  需要要定义的属性名或方法的名字 *  目标属性所拥有的特性 - descriptor (之后讲解下面案例不包括) 代码实例 var User = {}; Object.defineProperty(User, 'info',

深入vue源码,了解vue的双向数据绑定原理

大家都知道vue是一种MVVM开发模式,数据驱动视图的前端框架,并且内部已经实现了双向数据绑定,那么双向数据绑定是怎么实现的呢? 先手动撸一个最最最简单的双向数据绑定 1 <div> 2 <input type="text" name="" id="text"> 3 <span id="show"></span> 4 </div> 5 6 <script>

vue 双向数据绑定原理

采用defineProperty的两个方法get.set 示例 1 <!-- 表单 --> 2 <input type="text" id="input"> 3 <!-- 展示 --> 4 <p id="desc"></p> 1 let obj = {}; 2 let temp = {};//采用临时变量代理obj 3 Object.defineProperty(obj,'name',{

Vue的双向数据绑定原理是什么?

vue是采用数据劫持,并且使用发布-订阅者的开发模式.原理是观察者observer通过Object.defineProperty()来劫持到各个属性的getter setter,在数据变动的时候,会被observer观察到,会通过Dep通知数据的订阅者watcher,之后进行相应的视图上面的变化. 具体实现步骤: 第一步:需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter和getter 这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据

SharePoint Client Object Model API 介绍以及工作原理解析

COM和ServerAPI 的对比 SharePoint从2010开始引入了Client Object Model的API(后文中用COM来代替),从名字来看,我们可以简单的看出,该API是面向客户端的应用程序的.有这个这套API,使得所有SharePoint的终端用户 可以开发自己的应用程序来访问,修改SharePoint.下面的列表简述了COM和Server API的区别:   COM Server 运行端 可以在任何能够访问SharePoint的机器上运行 可以再浏览器上,.Net应用程序

vue双向数据绑定原理

1.实现一个数据监听器Observer,能够对数据对象的所有属性进行监听,如有变动可拿到最新值通知订阅者2.实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析,以及绑定相应的更新函数3.实现一个Watcher,作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知,执行指令绑定的相应回调函数,从而更新视图4.mvvm入口,整合以上三者 原文地址:https://blog.51cto.com/13550695/2467904