Proxy 中的 Handler 对象

Proxy 中的 Handler 对象

handler:对象包含 Proxy 的各个捕获器,且所有的捕获器是可选的。如果没有定义某个捕捉器,那么就会保留源对象的默认行为。
在使用 Proxy 对象的 handler 时,通常与 Reflect 内置对象配合使用,且 Reflect 内置对象的方法与 handler 对象的方法相同。

方法

  • handler.apply():该方法用于拦截函数的调用。

    • 语法

        const proxy = new Proxy(target, {
        	apply(target, thisArg, argumentsList) { }
        });
      
    • 参数
      target:目标对象(函数)。
      thisArg:被调用时的上下文对象。
      argumentsList:被调用时的参数数组。

    • 返回值
      返回任何值。

  • handler.construct():该方法用于拦截 new 操作符。为了使 new 操作符生效,目标对象必须是一个函数对象,可构造的。

    • 语法

        const proxy = new Proxy(target, {
        	construct(target, argumentsList, newTarget) { }
        });
      
    • 参数
      target:目标对象。
      argumentsList:constructor 的参数列表。
      newTarget:最初被调用的构造函数,就上面的例子而言是 proxy 。

    • 返回值
      返回一个对象。

  • handler.defineProperty():该方法用于拦截对象的 Object.defineProperty() 操作。

    • 语法

        const proxy = new Proxy(target, {
        	defineProperty(target, property, descriptor) { }
        });
      
    • 参数
      target:目标对象。
      property:待检索其描述的属性名。
      descriptor:待定义或修改的属性的描述符。

    • 返回值
      返回一个 Boolean 类型的值,表示定义该属性的操作成功与否。

  • handler.deleteProperty():该方法用于拦截对象属性的 delete 操作。

    • 语法

        const proxy = new Proxy(target, {
        		deleteProperty(target, property) { }
        	});
      
    • 参数
      target:目标对象。
      property:待删除的属性名。

    • 返回值
      返回一个 Boolean 类型的值,表示了该属性是否被成功删除。

  • handler.get():该方法用于拦截对象的读取属性操作。

    • 语法

        const proxy = new Proxy(target, {
        	get(target, property, receiver) { }
        });
      
    • 参数
      target:目标对象。
      property:被获取的属性名。
      receiver:Proxy或者继承Proxy的对象。

    • 返回值
      返回任何值。

  • handler.getOwnPropertyDescriptor():该方法是 Object.getOwnPropertyDescriptor() 方法的钩子。

    • 语法

        const proxy = new Proxy(target, {
        	getOwnPropertyDescriptor(target, prop) { }
        });
      
    • 参数
      target:目标对象。
      prop:返回属性名称的描述。

    • 返回值
      返回一个 object 或 undefined 。

  • handler.getPrototypeOf():该方法是一个 Proxy 方法,当读取 Proxy 对象的原型时,该方法就会被调用。

    • 语法

        const proxy = new Proxy(target, {
        	getPrototypeOf(target) { }
        });
      
    • 参数
      target:被代理的目标对象。

    • 返回值
      返回一个 object 或 null 。

  • handler.has():该方法是针对 in 操作符的代理方法。

    • 语法

        const proxy = new Proxy(target, {
        	has(target, prop) { }
        });
      
    • 参数
      target:目标对象。
      prop:需要检查是否存在的属性.

    • 返回值
      返回一个 boolean 属性的值。

  • handler.isExtensible():该方法用于拦截对对象的 Object.isExtensible() 方法。

    • 语法

        const proxy = new Proxy(target, {
        	isExtensible(target) { }
        });
      
    • 参数
      target:目标对象。

    • 返回值
      返回一个 Boolean 值或可转换成 Boolean 的值。

  • handler.ownKeys():该方法用于拦截 Reflect.ownKeys() 方法。

    • 语法

        const proxy = new Proxy(target, {
        	ownKeys(target) { }
        });
      
    • 参数
      target:目标对象。

    • 返回值
      返回一个可枚举对象。

  • handler.preventExtensions():该方法用于设置对 Object.preventExtensions() 方法的拦截。

    • 语法

        const proxy = new Proxy(target, {
        	preventExtensions(target) { }
        });
      
    • 参数
      target:所要拦截的目标对象。

    • 返回值
      返回一个布尔值。

  • handler.set():该方法是设置属性值操作的捕获器。

    • 语法

        const proxy = new Proxy(target, {
        	set(target, property, value, receiver) { }
        });
      
    • 参数
      target:目标对象。
      property:将被设置的属性名或 Symbol 。
      value:新属性值。
      receiver:最初被调用的对象。通常是 proxy 本身,但 handler 的 set 方法也有可能在原型链上,或以其他方式被间接地调用(因此不一定是 proxy 本身)。

    • 返回值
      返回一个布尔值。

  • handler.setPrototypeOf():该方法主要用来拦截 Object.setPrototypeOf() 方法。

    • 语法

        const proxy = new Proxy(target, {
        	setPrototypeOf(target, prototype) { }
      

      });

    • 参数
      target:被拦截目标对象。
      prototype:对象新原型或为 null 。

    • 返回值
      如果成功修改了 [[Prototype]],setPrototypeOf 方法返回 true,否则返回 false 。

参考文献

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值