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
  • 相关阅读:
    Java多线程、并发
    Java I/O系统
    Java注解
    Arthas(Java诊断工具)
    Java泛型
    Java内部类
    libpcap使用
    python文件服务器
    设计模式
    protobuf
  • 原文地址:https://www.cnblogs.com/yeanling/p/11101716.html
Copyright © 2011-2022 走看看