searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

[ patterns.dev ] 代理模式 in javascrip

2023-05-25 01:06:06
6
0

# 什么是代理模式

代理模式,顾名思义,就是你不能去直接的操作某个对象的属性或者方法,你需要通过一个`代理`去访问。

# javascript中的代理模式

javascript中的Proxy对象就是一个代理模式的实现,在创建Proxy对象的时候,除了传入需要被代理的原始对象以外,还需要传入handler对象,handler对象中是一些方法,例如下面的get和set,它们会在特定的场景被调用。比如get会在取值时被调用。handler中还有很多别的方法,具体可以看mdn中关于Proxy的内容。

const obj = {
  a: 1,
  b: 2,
  c: 3,
};

const proxyObj = new Proxy(obj, {
  get(obj, prop) {
    console.log("in get");
    return obj[prop];
  },
  set(obj, prop, value) {
    console.log("in set");
    obj[prop] = value;
  },
});

proxyObj.a // in get
proxyObj.b = 222 // in set

我觉得ES6中的Proxy相比于我们去定义一个CustomProxy,然后去代理,它的好处在于:
- 这是浏览器原生支持的
- 我们可以像操作原始对象一样操作代理对象,并不需要特殊操作

那么代理模式在javascript中可以做什么?我觉得用于改造旧代码应该还挺不错的,在不改变原本操作逻辑的基础上,做一些修改。除了这个,进行一些校验工作也是不错的。

# Proxy & Reflect

在javascript中,Proxy经常与Reflect一起用(我也不知道为啥),Reflect对象提供了几个方法,我们可以通过这些方法取到原始对象的属性。那这里的原始对象是什么?原始对象就是你传给Reflect的那个对象,也就是说,如果你传了一个Proxy对象给它,它所取的值也是通过该Proxy对象去取的,并且它不会unproxy。Reflect常用于Proxy对象的handler中,可以很方便的取原始对象的属性,但是我目前也不是很清楚这个的好处在哪,以后知道了再补充一下。

0条评论
0 / 1000
luluuuu
10文章数
0粉丝数
luluuuu
10 文章 | 0 粉丝
原创

[ patterns.dev ] 代理模式 in javascrip

2023-05-25 01:06:06
6
0

# 什么是代理模式

代理模式,顾名思义,就是你不能去直接的操作某个对象的属性或者方法,你需要通过一个`代理`去访问。

# javascript中的代理模式

javascript中的Proxy对象就是一个代理模式的实现,在创建Proxy对象的时候,除了传入需要被代理的原始对象以外,还需要传入handler对象,handler对象中是一些方法,例如下面的get和set,它们会在特定的场景被调用。比如get会在取值时被调用。handler中还有很多别的方法,具体可以看mdn中关于Proxy的内容。

const obj = {
  a: 1,
  b: 2,
  c: 3,
};

const proxyObj = new Proxy(obj, {
  get(obj, prop) {
    console.log("in get");
    return obj[prop];
  },
  set(obj, prop, value) {
    console.log("in set");
    obj[prop] = value;
  },
});

proxyObj.a // in get
proxyObj.b = 222 // in set

我觉得ES6中的Proxy相比于我们去定义一个CustomProxy,然后去代理,它的好处在于:
- 这是浏览器原生支持的
- 我们可以像操作原始对象一样操作代理对象,并不需要特殊操作

那么代理模式在javascript中可以做什么?我觉得用于改造旧代码应该还挺不错的,在不改变原本操作逻辑的基础上,做一些修改。除了这个,进行一些校验工作也是不错的。

# Proxy & Reflect

在javascript中,Proxy经常与Reflect一起用(我也不知道为啥),Reflect对象提供了几个方法,我们可以通过这些方法取到原始对象的属性。那这里的原始对象是什么?原始对象就是你传给Reflect的那个对象,也就是说,如果你传了一个Proxy对象给它,它所取的值也是通过该Proxy对象去取的,并且它不会unproxy。Reflect常用于Proxy对象的handler中,可以很方便的取原始对象的属性,但是我目前也不是很清楚这个的好处在哪,以后知道了再补充一下。

文章来自个人专栏
javascript
7 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0