谷歌、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. BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)

    浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...

  2. centos安装gcc

    1.安装gcc基本开发工具环境 yum groupinstall 'Development Tools' 2.安装完成后查看安装是否成功 whereis gcc 3.查看gcc版本 gcc --ver ...

  3. JAVA多线程读写文件范例

    在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位作者写的基础上做了改良,但已不记得原文的地址.如果有知情者,烦请帖出地址,我在此文上加入 ...

  4. JQuery 关于位置的计算(重要)

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

  5. vue头像上传与文件压缩

    工作中遇到的问题记录:vue开发头像上传组件,后端提供接口,需求为可相册上传,可相机拍摄上传,文件大小限制为2M 需求点分析 移动端调用相册/摄像头实现拍照 图片压缩,当前高像素的相机拍出来的图片都有 ...

  6. vue2.0中引入UEditor的一些坑。。。。

    开发后台系统的时候,富文本编辑器肯定是必不可少的,然后呢~在天朝当然要属百度编辑器(UEditor)最成熟了,功能全面,文档齐全(相对),ui优美(...,对于程序员来说)等等许多方面(MMP,还不是 ...

  7. 固定的价格就意味着背叛——《practices of an agile developper》

    “对这个项目,我们必须要有固定的报价.虽然我们还不清楚项目的具体情况,但仍要有一个报价.到星期一,我需要整个团队的评估,并且我们必须要在年末交付整个项目.” Venkat & Andy 提出了 ...

  8. struts2 action通配符

    首先,看一个struts2的配置文件: <package name="actions" extends="struts-default" namespac ...

  9. 《Haskell趣学指南》

    <Haskell趣学指南> 基本信息 原书名:Learn You a Haskell for Great Good!: A Beginner's Guide 原出版社: No Starch ...

  10. [Android Pro] Android 必知必会-使用 supportV4 的 RoundedBitmapDrawable 实现圆角

    RoundedBitmapDrawable 是 supportV4 下的一个类,有了它,显示圆角和圆形图片的情况下就不需要额外的第三方类库了,还能和各种图片加载库配合使用. 背景 今天无意间看到一段实 ...