美文网首页
js实现数据绑定

js实现数据绑定

作者: summer_味道制造 | 来源:发表于2018-03-06 16:54 被阅读0次

    在进行代码编写前,我们先来认识一下数据绑定需要知道的知识

    1. getter与setter
      我们都知道javaScript中的对象是健值对的集合,在ES5中可以使用一个或两个方法来代替,这两个方法就是getter和setter。这两个方法定义的属性叫做“存储器属性”,不同于数据属性只有一个值。
      看下面代码
    const obj = {
      name:'张三',
    };
    obj.name ;//  张三
    obj.name = ‘李四’;
    

    很常用的操作对不对,再我们没有使用getter和setter是这样操作的,那么假如我们要使用getter和setter那么代码又是怎样的呢,我们接着往下看

    const obj = {
      get  name(){.....},
      set  name(){.....},
    };
    

    我们用两个方法取代了原来的值,那么这两个方法如何使用呢

    const obj = {
     _name:'张三',
      get  name(){
        return this._name;
      },
      set  name(value){
        this._name = value;
      },
    };
    obj.name //张三
    obj.name =''李四’;
    obj.name //李四’
    

    看到这里大家应该知道它是怎么运行的了吧,通过set,get方法我们可以创造无限可能,不过需要注意的是,一般来说get和set总是成对出现,如果只有get意味着只能读,只有set只能写。

    1. Object.defineProperty()
      Object.defineProperty(obj, prop, descriptor)方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象,它接受三个参数,分别是:
    • 要在其上定义属性的对象
    • 要定义或修改的属性的名称
    • 将被定义或修改的属性描述符
      关于属性的描述,请参考descriptor;我们对数据双向绑定的实现完全来自于Object.defineProperty();
    <input  type="text">
    -----------------------------
    const obj = {};
    Object.defineProperty(obj, 'name', {
          get() {
            return document.getElementsByTagName('input')[0].value;
          },
          set(value) {
            document.getElementsByTagName('input')[0].value = value;
          },
          configurable: true
     });
    document.getElementsByTagName('input')[0].onchange = function () {
          console.log('obj', obj.name);
     }
    

    以上就是实现数据绑定的简易实现,所有大家明白了为什么ie8以下为什么不能直接使用三大框架?

    相关文章

      网友评论

          本文标题:js实现数据绑定

          本文链接:https://www.haomeiwen.com/subject/gvtrfftx.html