Logo
Section 1 / 5

简介

代理简介及处理目标访问时的一些陷阱

导入

简介

代理简介及处理目标访问时的一些陷阱

代理(Proxy) 是一个包装对象或函数的对象,用于监控对被包装项(即 目标对象 或 目标函数)的访问。我们使用代理的目的是阻止对目标的直接访问。

代理对象包含一些称为 陷阱(traps) 的机制,用于处理对目标的访问。这些陷阱与 Reflect API 中的方法相同。因此,本节假设你已经熟悉 Reflect API,因为你会使用相同的调用方式。以下是可用的陷阱:

  • apply
  • construct
  • defineProperty
  • deleteProperty
  • get
  • getOwnPropertyDescriptor
  • getPrototypeOf
  • has
  • isExtensible
  • ownKeys
  • preventExtensions
  • set
  • setPrototypeOf

一旦代理对象的某个陷阱被触发,我们就可以执行任意代码,甚至无需访问目标对象。代理可以决定是否允许你访问目标,或者自行处理该请求。

这些可用的陷阱使我们能够监控几乎所有的使用场景。不过,也有一些行为无法被拦截。

例如,我们无法判断某个对象是否与其他值进行了比较,也无法判断它是否被另一个对象包裹。同样,我们无法判断某个对象是否作为操作符的运算对象。实际上,这些缺失的功能在实际应用中几乎不会造成问题。

现在,让我们学习如何定义这些代理。

Reflect API

定义代理