zoukankan      html  css  js  c++  java
  • 数据双向绑定的三种方式

    1.脏数据检查机制。使用的是angular的轮询的方式   

      缺点:性能低,

      好处:兼容ie8

    2.数据劫持 Object.defineProperty() es5中的语法

      这个无法被修复的,vue不支持ie678

    3.proxy 方法 es6中的新语法

     proxy的方法现在用的还是很少的,详细解释一下proxy这个方法

      1.什么是Proxy?它的作用是?

        据阮一峰文章介绍:Proxy可以理解成,在目标对象之前架设一层 "拦截",当外界对该对象访问的时候,都必须经过这层拦截,而Proxy就充当了这种机制,类似于代理的含义,它可以对外界访问对象之前进行过滤和改写该对象。

      Proxy基本语法

    const obj = new Proxy(target, handler);

    参数说明如下:

    target: 被代理对象。
    handler: 是一个对象,声明了代理target的一些操作。
    obj: 是被代理完成之后返回的对象。

    但是当外界每次对obj进行操作时,就会执行handler对象上的一些方法。handler中常用的对象方法如下:

    1. get(target, propKey, receiver)
    2. set(target, propKey, value, receiver)
    3. has(target, propKey)
    4. construct(target, args):
    5. apply(target, object, args)

     1 const target = {
     2   name: 'kongzhi'
     3 };
     4 
     5 const handler = {
     6   get: function(target, key) {
     7     console.log(`${key} 被读取`);
     8     return target[key];
     9   },
    10   set: function(target, key, value) {
    11     console.log(`${key} 被设置为 ${value}`);
    12     target[key] = value;
    13   }
    14 };
    15 
    16 const testObj = new Proxy(target, handler);
    17 
    18 /*
    19   获取testObj中name属性值
    20   会自动执行 get函数后 打印信息:name 被读取 及输出名字 kongzhi
    21 */
    22 console.log(testObj.name);
    23 
    24 /*
    25  改变target中的name属性值
    26  打印信息如下: name 被设置为 111 
    27 */
    28 testObj.name = 111;
    29 
    30 console.log(target.name); // 输出 111

    如上代码所示:也就是说 target是被代理的对象,handler是代理target的,那么handler上面有set和get方法,当每次打印target中的name属性值的时候会自动执行handler中get函数方法,当每次设置 target.name 属性值的时候,会自动调用 handler中的set方法,因此target对象对应的属性值会发生改变,同时改变后的 testObj对象也会发生改变。同理改变返回后 testObj对象中的属性也会改变原对象target的属性的,因为对象是引用类型的,是同一个引用的。如果这样还是不好理解的话,可以简单的看如下代码应该可以理解了:

     1 const target = {
     2   name: 'kongzhi'
     3 };
     4 
     5 const testA = target;
     6 
     7 testA.name = 'xxx';
     8 
     9 console.log(testA.name); // 打印 xxx
    10 
    11 console.log(target.name); // 打印 xxx
  • 相关阅读:
    PAT (Advanced Level) 1114. Family Property (25)
    PAT (Advanced Level) 1113. Integer Set Partition (25)
    PAT (Advanced Level) 1112. Stucked Keyboard (20)
    PAT (Advanced Level) 1111. Online Map (30)
    PAT (Advanced Level) 1110. Complete Binary Tree (25)
    PAT (Advanced Level) 1109. Group Photo (25)
    PAT (Advanced Level) 1108. Finding Average (20)
    PAT (Advanced Level) 1107. Social Clusters (30)
    PAT (Advanced Level) 1106. Lowest Price in Supply Chain (25)
    PAT (Advanced Level) 1105. Spiral Matrix (25)
  • 原文地址:https://www.cnblogs.com/yeanling/p/11101716.html
Copyright © 2011-2022 走看看