谷歌、QQ支持,360、搜狗不支持

使用proxy代理可以实现,对原先的类不进行处理,新建一个类,对此进行拦截处理,以实现低耦合

可以通过代理拦截的方法,将方法进行重写。

//--------------例1--------------

let obj = {
  webName: '百度',
  url: 'www.baidu.com'
} let p = new Proxy(obj,{
  get: function(target,key){
    return target[key]
  },   set: function(target,key,value){
    target[key] = value
  }
}); p.webName = 'baidu';
console.log(p.webName);

//------------例2-------------

Proxy实际上重载(overload)了点运算符

var proxy = new Proxy(target,handler);

class Register{ // 定义一个类
  constructor(){
    this.prefix = '';
    this.name = '';
    console.log('构造完成');
  }
} let obj = new Register(); // 使用new方法新建一个类 let p = new Proxy(obj,{ // 定义一个代理,起到拦截作用 将使用new方法创建的类使用Proxy代理
  get: function(target,key){
    return target[key];
  },   set: function(target,key,value){
    if(key == 'id' && value == 15){
      target['prefix'] = '此人是逃犯';
    }     target[key] = value;     if(key == 'name'){
      value = target[key] + ',' + target['prefix'];
    }     return Reflect.set(target,key,value); // 调用反射,当set全部结束,输出的时候会调动get方法
  }
}); p.id = 1; // . 会自动调用get和set方法 p.name = '张三'; // 相当于 调用set console.log(p.name); p.id = 15; p.name = '李四'; console.log(p.name);

实例:

//-----------------------------------

Proxy对象方法列表:

方法                                                          描述

handler.apply()                       拦截Proxy实例作为函数调用的操作

handler.construct()                 拦截Proxy实例作为构造函数调用的操作

handler.defineProperty()          拦截Object.defineProperty操作

handler.deleteProperty()          拦截delete删除属性操作

handler.enumerate()               此方法将被废弃,不建议使用

handler.get()                          拦截属性的读取操作

handler.getOwnPropertyDescriptor()  拦截Object.getOwnPropertyDescriptor()操作

handler.getPrototypeOf()          拦截获取原型对象操作

handler.has()                          拦截属性检索操作

handler.isExtensible()              拦截Object.isExtensible()操作

handler.ownKeys()                  拦截Object.getOwnPropertyNames()操作

handler.preventExtensions()     拦截Object.preventExtensions()操作

handler.set()                          拦截属性赋值操作

handler.setPrototypeOf()         拦截Object.setPrototypeOf()操作

Proxy.revocable()                    创建一个可取消的Proxy实例

proxy [ˈprɒksi] 代理的更多相关文章

  1. 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy nginx反向代理原理和配置讲解 防止外部客户机获取内部内容服务器的重定向 URL 缓存命中

    [大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 - Edison Chou - 博客园http://www.cnblogs.com/edisonchou/p/4126742.html 图 ...

  2. 代理模式(Proxy)--动态代理(CGLIB)

    上一篇:代理模式(Proxy)--动态代理(jdk) (1)CGLIB技术是第三方代理技术,可以对任何类生成代理,代理的原则是对目标对象进行继承代理 (2)如果目标对象被final修饰,则无法被CGL ...

  3. 代理模式(Proxy)--动态代理(JDK)

    在是上一篇博客中实现了静态代理. 在上篇的结尾提到了一个问题: 思考:如果我们下需要对火车,自行车实现相同的代理,我们又该如何实现呢? 这篇博客就来解决这个问题: 解决这类问题需要用到动态代理技术,实 ...

  4. 前端本地proxy跨域代理配置

    等了好久的接口,总算拿到了,结果却发现用本地localhost:9712去请求接口的时候,出现了跨域错误,而这个时候我们就需要进行下跨域配置了. 首先,找到项目中名为webpack.config.js ...

  5. java Proxy InvocationHandler 动态代理实现详解

    spring 两大思想,其一是IOC,其二就是AOP..而AOP的原理就是java 的动态代理机制.这里主要记录java 动态代理的实现及相关类的说明. java  动态代理机制依赖于Invocati ...

  6. 基于jdk proxy的动态代理模式

    代理模式 是spring AOP机制的实现基础,有必要学习一下. 有两种,一种是目标类有接口的, 采用JDK动态代理,一种是目标类没接口的,采用CGLIB动态代理. 先看一组代码, package c ...

  7. JQuery之proxy实现绑定代理

    在javascript中,this指代的对象时常会变化,这会造成程序,混乱,一般做法就是先将this保存在一个变量中,就不怕她变了,我们先看一个小例子 var A = function(){ this ...

  8. PAC(Proxy Auto Config)代理自动配置文件的编写

    Proxy Auto Config文件格式说明 PAC文件实际上是一个Script, 通过PAC我们可以让系统根据情况判断使用哪一个Proxy来访问目标网址, 这样做的好处: 分散Proxy的流量,避 ...

  9. 设计模式(八)Dynamic Proxy Parttern 动态代理模式

    举例: jdk自带动态代理 javaassit字节码操作库实现 CGLIB ASM底层操作 实际例子: 使用jdk自带动态代理 java.lang.reflect.Proxy 作用 动态生成代理类和对 ...

随机推荐

  1. 最封闭的开源系统,话说Android的八宗罪

    最封闭的开源系统,话说Android的八宗罪 http://www.ifanr.com/9833 Android 分裂的多面性 http://tech.cncms.com/shouji/android ...

  2. php正则给图片提取/替换/添加alt标签的正则代码

    有的时候我们需要对富文本编辑器的内容做一些处理,例如图片的alt标签.百度的富文本编辑器添加的图片就是没有的,那么我们要添加就必须使用正则了,下面一起来看看如何实现吧. $preg = "/ ...

  3. 类方法load和initialize的区别

    1.+load方法当类或分类添加到object-c runtime时被调用,子类的+load方法会在它所有父类的+load方法之后执行,而分类的+load方法会在它的主类的+load方法之后执行.但不 ...

  4. 【美】范·K·萨普曼 - 通向财务自由之路(2013年11月26日)

    <通向财务自由之路> 作 者:[美]范·K·萨普曼  译 者:董梅 系 列: 出 版:机械工业出版社 字 数:约40千字 阅读完成:2013年11月26日

  5. React-Native调用支付宝,微信

    https://www.pingxx.com/docs/downloads Ping++ 是为移动端应用以及 PC 网页量身打造的下一代支付系统,通过一个 SDK 便可以同时支持移动端以及 PC 端网 ...

  6. jquery.lazyload.js实现图片懒载入

    个人理解:将须要延迟载入的图片的src属性所有设置为一张同样尽可能小(目的是尽可能的少占宽带,节省流量,因为缓存机制,当浏览器载入了一张图片之后,同样的图片就会在缓存中拿.不会又一次到server上拿 ...

  7. WinForm中DataGridView验证单元格输入的是数字

    转载:http://www.cnblogs.com/ganqiyin/archive/2013/02/18/2915491.html 事件:DataGridView验证单元格输入的是数字,DataGr ...

  8. 老生常谈javascript的5中继承

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. S3C2440上LCD驱动(FrameBuffer)实例开发讲解

    一.开发环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand, Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2 二.背景知识 ...

  10. [翻译] YLGIFImage 高效读取GIF图片

    YLGIFImage 高效读取GIF图片 https://github.com/liyong03/YLGIFImage Asynchronized GIF image class and Image ...