Skip to content

Proxy ​

详解 js 代理对象使用


概述 ​

代理用来封装普通对象,隔绝对普通对象的直接操作,通过特定的注入陷阱函数(trap),将对普通对象的操作加工后在转发。

学习代理的重点是理解 es6 对哪些底层操作暴露了陷阱函数,及如何使用这些陷阱函数

基本使用 ​

  1. 创建目标对象
  2. 创建代理对象
    1. 设定目标对象
    2. 配置陷阱函数
  3. 使用代理对象

参看示例 proxy constructor

注意如下问题

  1. 实例化的 proxy ,需要设置陷阱函数才有价值
  2. 对代理对象的操作才会触发陷阱函数

典型的代理函数如下

代理陷阱被重写的行为默认反射
get读取一个属性的值Reflect.get()
set写入一个属性的值Reflect.set()
hasin 运算符Reflect.has()
deletePropertydelete 运算符Reflect.deleteProperty
getPrototypeOfObject.getPrototypeOf()Reflect.getPrototypeOf
setPrototypeOfObject.setPrototypeOf()Reflect.setPrototypeOf
isExtensibleObject.isExtensible()Reflect.isExtensible
preventExtensionsObject.preventExtensions()Reflect.preventExtensions
getOwnPropertyDescriptorObject.getOwnPropertyDescriptorReflect.getOwnPropertyDescriptor
definePropertyObject.defineProperty()Reflect.defineProperty
ownKeysObject.keys,Object.getOwnPropertyNames(),Object.getOwnPropertySymbols()Reflet.wonKeys()
apply调用一个函数Reflect.apply()
construct使用 new 调用一个函数Reflect.construct()

常用代理汇总 ​

知识点 ​

  1. 采用 Proxy 定义代理对象