博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Proxy
阅读量:6913 次
发布时间:2019-06-27

本文共 1975 字,大约阅读时间需要 6 分钟。

本系列属于阮一峰老师所著的学习笔记


概述

Proxy原意是代理,可以理解为”代理器“。Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,属于一种”元编程“(meta programming),即对编程语言进行编程。

var obj = new Proxy({},{  get: function(target,key,receiver){    console.log(`getting ${key}!`)    return Reflect.get(target,key,receiver)  },  set: function(target,key,value,receiver){    console.log(`setting ${key}!`)    return Reflect.set(target,key,value,receiver)  }})obj.count = 1 // setting count!++obj.count // getting count! settting count!// Proxy构造函数,用来生成Proxy实例var proxy = new Proxy(target,handler) // target表示拦截的目标对象,handle参数也是一个对象,用来定制拦截行为// 设置object.proxy属性,在object对象上调用var object = {proxy: new Proxy(target,handler)}// 作为对象的原型对象调用var proxy = new Proxy({},{   get: function(target,property){      return 35   }})let obj = Object.create(proxy)obj.time // 35

Proxy拦截操作方法一共13种:

  • get(target,propKey,receiver) :拦截对象属性的读取,如proxy.foo
  • set(target,propKey,value,reveiver) :拦截对象属性的设置,返回一个布尔值,如proxy.foo = v
  • has(target,propKey) :拦截propKey in proxy的操作,返回一个布尔值
  • deleteProperty(target,propKey) :拦截delete proxy[propKey]操作,返回一个布尔值
  • ownKeys(target) :拦截Object.getOwnPropertyNames(proxy)Object.getOwnPropertySymbols(proxy)Object.keys(proxy) ,返回一个数组。该方法返回目标对象所有自身属性的属性名,而Obejct.keys()的返回结果仅包括目标对象自身的可遍历属性
  • getOwnPropertyDescroptor(target,propKey) :拦截Object.getOwnPropertyDescriptor(proxy,propKey) ,返回属性的描述对象
  • defineproperty(target,propKey,propDesc) :拦截Object.defineProperty(proxy,propKey,propDesc)Object.defineProperties(proxy,propDescs) ,返回一个布尔值
  • preventExtensions(target) :拦截Object.preventExtensions(proxy) , 返回一个布尔值
  • getPrototypeOf(target) :拦截Object.getPrototype(proxy) ,返回一个对象
  • isExtensible(target) :拦截Object.isExtensible(proxy) ,返回一个布尔值
  • setPrototypeOf(target,proto) :拦截Object.setPrototypeOf(proxy,proto) ,返回一个布尔值,如果目标对象是函数,那么还有两种额外操作可以拦截。
  • apply(target,object,args) :拦截Proxy实例作为函数调用的操作,比如proxy(...args)proxy.call(objcet,...args)proxy.apply(...)
  • construct(target,args) :拦截Proxy实例作为构造函数调用的操作,比如proxy(...args)

转载于:https://www.cnblogs.com/pengzhixin/p/7691631.html

你可能感兴趣的文章
java基础-多线程初步了解
查看>>
零基础微信开发之自动回复电影
查看>>
spring Cloud Gateway 入门简单使用
查看>>
SpringBoot源码解析-内嵌Tomcat容器的启动
查看>>
Flow_学习笔记
查看>>
阿里Java面试题剖析:关于系统拆分,为什么要进行系统拆分?
查看>>
Application 详解
查看>>
玩转Kotlin- 实现方法队列 ,顺序执行
查看>>
朋友,这里有个仓库需要你 PR 一下
查看>>
nginx-kafka 数据采集
查看>>
js把URL转成对象 对象转换成URL
查看>>
犀牛书阅读手记
查看>>
web项目的WEB-INF目录使用说明
查看>>
GitHub Page+Hexo+nexT 搭建个人博客
查看>>
请求和响应
查看>>
除了画佩奇我们还要玩点更高级的
查看>>
手把手教你写一个Java的orm框架(3)
查看>>
EMQ X Meetup-深圳站
查看>>
ZooKeeper系列(1)--分布式系统的基石
查看>>
浮动布局和清除浮动
查看>>