谷歌、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. session_write_close() 用法

    1.需要session控制的大文件下载,防止因为占用session文件时间太久,导致其他页面的session无法执行 session_write_close() worked as a lifesav ...

  2. 实用在线小工具 -- JS代码压缩工具

        实用在线小工具 -- JS代码压缩工具 将JS代码进行压缩可以减少内存占用,下面链接是一个在线JS代码压缩工具,它将多余的空格和换行符压缩了. JS代码压缩工具链接:http://jspack ...

  3. Ubuntu 16.04开启SFTP服务

    说明:其实只要安装了SSH服务就已经具备了SFTP功能,这个用普通客户端无法连接,只能用支持SFTP协议的客户端才能连接. FileZilla作为FTP客户端,它也可以连接SFTP,SFTP的监听端口 ...

  4. Mahout学习之Mahout简单介绍、安装、配置、入门程序測试

    一.Mahout简单介绍 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的 ...

  5. IDA Pro plug-in defines

    /* This file contains definitions used by the Hex-Rays decompiler output. It has type definitions an ...

  6. change kernel defconfig

    make -C kernel/goldfish O=/media/linux/1/touch/export/phablet-ubuntu-20130618/out/target/product/gen ...

  7. ubuntu 安装 consul

    $ wget https://releases.hashicorp.com/consul/1.1.0/consul_1.1.0_linux_amd64.zip $ sudo apt-get insta ...

  8. jQuery EasyUI API 中文文档 - Panel面板

    <html> <head> <title>布局管理器--控制面板</title> <script src="jquery-easyui/ ...

  9. 黑马day16 jquery入门

    jquery: 1.jQuery 对象就是通过jQuery包装DOM对象后产生的对象. jQuery对象是jQuery独有的.假设一个对象是jQuery对象,那么它就能够使用jQuery里的方法:$( ...

  10. kali开启ssh服务,实现win远程登录

    本人问题:想通过windows7中的putty直接ssh到kali系统,而默认情况下,kali系统ssh服务没有开启. 具体按如下操作进行设置: 照以下步骤进行配置和操作: 1.修改sshd_conf ...