ES6中的代理(Proxy)和反射(Reflect)

Proxy 对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。代理可以拦截 js 引擎内部目标的底层对象操作,这些底层操作被拦截后会触发相应特定操作的陷阱函数。调用 **new proxy() **可创建代替其他目标(target)对象的代理,它虚拟化了目标,所以二者看起来功能一致。

Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers的方法相同。Reflect不是一个函数对象,因此它是不可构造的。与大多数全局对象不同,Reflect不是一个构造函数。你不能将其与一个new运算符一起使用,或者将Reflect对象作为一个函数来调用。Reflect的所有属性和方法都是静态的(就像Math对象)。

创建代理
let target = {
   }
let proxy = new Proxy(target, {
   })
proxy.msg = 'jinxing'
console.log(proxy.msg) // jinxing
console.log(target.msg) // jinxing

//----------------------以上代码用babel编译后-----------------------
"use strict";

require("core-js/modules/es6.function.bind");
// 定义默认的get和set方法
var defaultHandler = {
   
  get: function get(obj, propName) {
   
    return obj[propName];
  },
  set: function set(obj, propName, val) {
   
    obj[propName] = val;
  }
};
// 定义Proxy类
var Proxy = function Proxy(target, handler) {
   
    // 记录target和handler
  this.target = target;
  this.handler = handler;
    // 如果用户没传get/set函数就用默认get/set替换
  this.handler.get = this.handler.get || defaultHandler.get;
  this.handler.set = this.handler.set || defaultHandler.set;
};
// Proxy类获取属性方法
Proxy.prototype
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值