首页 > 其他分享 >使用Object.defineProperty手写一个简单的双向绑定

使用Object.defineProperty手写一个简单的双向绑定

时间:2022-10-14 21:23:28浏览次数:54  
标签:defalutName Object newval defineProperty 手写 model 属性

什么是双向绑定?
1.当一个对象(变量)的属性改变,那么调用这个属性的地方显示也发生变化,模型到视图(model=>view)
2.当调用属性的这个地方改变了这个属性(通常是一个表单元素),那么这个对象(或变量)的属性也会改变为最新的值,即视图到模型(view=>model)

   <div>
     <input type="text" id="model" /><br/>
     <div id="modelText"></div>
   </div>

我们怎么知道对象的属性变了?
使用Object.defineProperty设置对象的描述字段里面有两个属性set(设置属性时被调用)get(获取属性时被调用)

      let user = {}
      let defalutName = '会飞的鱼'
      let model = document.querySelector("#model")
      let modelText = document.querySelector("#modelText")
      model.value = defalutName
      modelText.textContent = defalutName
      // 定义属性 监听变化
      Object.defineProperty(user, 'name', {
        get: function() {
          console.log(`get name`);
          return defalutName
        },
        set: function(newval) {
          console.log(`set name`);
          defalutName = newval
          model.value = newval
          modelText.textContent = newval
        }
      })
      model.addEventListener('keyup', function () {
        user.name = this.value
        console.log('实现 视图=>模型');
      })

标签:defalutName,Object,newval,defineProperty,手写,model,属性
From: https://www.cnblogs.com/mdtayz/p/16793064.html

相关文章

  • 对于VMobject的深入研究
    首先,VMobject是由anchors和handles实现的贝塞尔曲线,例如:defplayscene0():plane=NumberPlane()vmobject=VMobject(color=GREEN)......
  • Unlock Object list:CR下清单解锁
    有时候需要传输的时候,挂了一堆乱七八糟的对象等等。会发现对象被锁,需要解锁SE10输入cr后,根据提示处理就行当然,有时候是需要把对象写进去,也可以直接编辑cr然后往里粘,也可以:......
  • CSharp: null object pattern in donet core 3
     ///<summary>///空对象模式nullobjectpattern///geovin,GeovinDueidt///</summary>interfaceIVehicle{voidTrave......
  • Object.getPrototypeOf(obj)
    ​​Object.getPrototypeOf(obj)​​ 返回指定对象的原型(内部​​[[Prototype]]​​属性的值)。obj:要返回其原型的对象。返回值:给定对象的原型。如果没有继承属性,则返回nu......
  • libcudart.so.8.0 cannot open shared object file: N
    解决办法是将一些文件复制到/usr/local/lib文件夹下:#注意自己CUDA的版本号!sudocp/usr/local/cuda-8.0/lib64/libcudart.so.8.0/usr/local/lib/libcudart.so.8.0&&sudo......
  • 【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)含源码
     前言前面我们给大家介绍了基于LabVIEW+YOLOv3/YOLOv4的物体识别(对象检测),今天接着上次的内容再来看看YOLOv5。本次主要是和大家分享使用LabVIEW快速实现yolov5的物体识......
  • 手写 call 方法
    手写一个call函数call()方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法。举个栗子:varfoo={value:1};functionbar(){......
  • Spring JPA 查询的时候提示错 org.hibernate.TransientObjectException
    错误的信息为:Causedby:java.lang.IllegalStateException:org.hibernate.TransientObjectException:objectreferencesanunsavedtransientinstance-savethetra......
  • Java基础__学习笔记__常用API-Object
    对象类用equals比较的是地址值packageStudyAPIofString;publicclasstest{publicstaticvoidmain(String[]args){students1=newstudent("张三",......
  • 10个常见的前端手写功能,你全都会吗?
    10个常见的前端手写功能,你全都会吗?前端阿飞2021年11月17日08:00 ·  阅读133703万丈高楼平地起,地基打的牢,才能永远立于不败之地。今天给大家带来的是10个常......