打印Proxy对象和ref对象的包实现详解

yizhihongxing

“打印Proxy对象和ref对象的包实现详解”是一个介绍JavaScript中 Proxy 对象和 Reflect 对象的文章,为了更好地理解这个主题,我们需要了解以下几个方面:

  1. Proxy对象和Reflect对象的概念和作用;
  2. Proxy对象和Reflect对象的使用场景;
  3. Proxy对象和Reflect对象的包实现方式。

什么是Proxy对象和Reflect对象

  • Proxy对象:是一种用于创建代理对象的对象,它可以拦截并改变底层操作的行为,比如属性访问、赋值、函数调用等,在成员访问之前进行屏蔽或转发,因此可以对外界访问进行过滤和改写。
  • Reflect对象:是一个内置对象,它提供了对被代理对象的底层操作的反射调用,可以替代传统Object对象上直接调用的一些操作方法,同时提供了默认的操作方法。

Proxy对象和Reflect对象的使用场景

Proxy对象和Reflect对象可以应用于多种场景:

  1. 数据校验:比如对于一个表单校验,用户输入一个值之后,需要我们根据特定的规则去校验这个值是否符合规范,这时可以通过代理对象去实现;
  2. 访问控制:比如对于一个对象,我们只允许某些人员进行进一步的访问操作,可以通过代理对象去实现;
  3. 数据监听和追踪:比如对于一个对象,我们需要在每次修改对象属性时进行通知或记录,可以通过代理对象去实现。

Proxy对象和Reflect对象的包实现方式

Proxy对象和Reflect对象的包实现方式分别如下所示:

// Proxy对象的包实现方式
const objProxy = new Proxy(target, {
  get(target, propKey, receiver) {},
  set(target, propKey, value, receiver) {},
  apply(target, thisArg, argArray) {},
  // 所有Trap函数...
});

// Reflect对象的包实现方式
const objReflect = {
  foo: 1,
  bar: 2,
  get getFoo() {
    return this.foo;
  },
  set setFoo(val) {
    this.foo = val;
  },
};
console.log(Reflect.get(objReflect, 'foo')); // 1
Reflect.set(objReflect, 'foo', 3);
console.log(Reflect.get(objReflect, 'foo')); // 3

示例1:以下代码应用了 Proxy 对象和 Reflect 对象,用 Proxy 对象实现了一个简单的数据监听。

const obj = new Proxy({}, {
  set(target, propKey, value, receiver) {
    console.log(`Propery ${propKey} is being set with value ${value}`);
    Reflect.set(target, propKey, value, receiver);
    return true;
  }
});

obj.name = 'Bob'; // Propery name is being set with value Bob

在这个示例中,我们使用了 Proxy 对象去拦截了数据的设置操作 set 方法,每当设置一个新的属性时,就会在控制台打印出对应的属性名和值,如此便实现了一个简单的数据监听。

示例2:以下代码应用了 Proxy 对象和 Reflect 对象,用 Proxy 对象实现了一个简单的权限管理。

const users = [
  { name: 'John', password: '1234' },
  { name: 'Mike', password: '5678' },
  { name: 'Kate', password: '9012' }
];

const securedUsers = new Proxy(users, {
  get(target, propKey, receiver) {
    if (propKey === 'password') {
      throw new Error('You are not authorized to get password!');
    }
    Reflect.get(target, propKey, receiver);
  },
  set(target, propKey, value, receiver) {
    if (propKey === 'password') {
      throw new Error('You are not authorized to set password!');
    }
    Reflect.set(target, propKey, value, receiver);
    return true;
  }
});

console.log(securedUsers[0].name); // John
console.log(securedUsers[0].password); // 抛出异常
securedUsers[0].name = 'Tom';
securedUsers[0].password = '1111' // 抛出异常

在这个示例中,我们使用了 Proxy 对象去拦截了数据的读写操作 getset 方法,每当进行不规定操作时,就会抛出对应的异常提示,如此便实现了一个简单的权限管理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:打印Proxy对象和ref对象的包实现详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue+webpack项目配置便于维护的目录结构教程详解

    下面我将详细讲解“Vue+webpack项目配置便于维护的目录结构教程详解”的完整攻略。 1. 开始前的准备 首先需要确保已经正确安装了Node.js和Vue-cli,并且创建了一个基于Vue-cli的项目。 2. 目录结构设计 在Vue-cli创建的项目中,已经自带了一些目录和文件,如下所示: . ├── README.md ├── babel.confi…

    Vue 2023年5月28日
    00
  • vue 导出文件,携带请求头token操作

    让我详细讲解一下 “vue 导出文件,携带请求头token操作” 的完整攻略。 导出文件 要导出文件,我们可以利用浏览器提供的 download 和 Blob API 来实现。具体的步骤如下: 创建一个 Blob 对象,存储文件的内容。我们可以使用 new Blob() 方法来创建一个 Blob 实例。通常我们需要将要导出的内容以字符串形式传递给 Blob …

    Vue 2023年5月27日
    00
  • vue实现图片拖拽功能

    在这里我将详细讲解使用Vue.js实现图片拖拽功能的攻略。这里我们将使用 Vue Droppable 这个开源插件来实现。 步骤一:安装 Vue Droppable Vue Droppable 是一个 Vue.js 插件,它旨在提供一个易于使用的 API 来实现拖放(Drag & Drop)功能。如果你已经在 Vue 应用中使用 npm 包管理器,则…

    Vue 2023年5月29日
    00
  • GraphQL在react中的应用示例详解

    下面我将为您详细讲解“GraphQL在react中的应用示例详解”的完整攻略。 一、什么是GraphQL? GraphQL是由Facebook于2012年开发的一个用于API开发的查询语言,它使得客户端能够准确地获取所需的数据,而不需要从服务器请求额外的数据,从而提高了应用程序的效率。 二、GraphQL在React中的应用 1. 使用Apollo Clie…

    Vue 2023年5月28日
    00
  • SpringBoot+VUE实现前后端分离的实战记录

    下面是“SpringBoot+VUE实现前后端分离的实战记录”的完整攻略: 1. 前后端分离理念 前后端分离(Front-end and back-end separation)是指前端页面和后端数据完成分离,前端专注于数据的呈现,后端专注于数据的处理、存取。 2. 技术栈介绍 前端技术:Vue、Vue-router、Vuex、Axios、Element U…

    Vue 2023年5月28日
    00
  • vue 实现小程序或商品秒杀倒计时

    当需要在网站中实现小程序或商品秒杀倒计时功能时,可以使用 Vue.js 框架来进行实现。这里提供一个完整的攻略,介绍如何使用 Vue.js 实现这个功能。 步骤一:安装 Vue.js 首先需要安装 Vue.js,在命令行中输入以下命令: npm install vue 安装完成之后,可以在 HTML 中引入 Vue.js: <script src=&q…

    Vue 2023年5月27日
    00
  • VUEJS实战之修复错误并且美化时间(2)

    让我来为您详细讲解一下“VUEJS实战之修复错误并且美化时间(2)”的完整攻略。 1. 简介 本文是继“VUEJS实战之修复错误并且美化时间(1)”之后,对于时间美化功能的扩展。在上一篇文章中,我们已经完成了将时间戳转换为固定格式的日期字符串。但是,我们发现显示出来的时间还是不够美观,需要进行美化。 2. 时间美化 在Vue.js中,我们可以使用Moment…

    Vue 2023年5月28日
    00
  • VSCode搭建vue项目的实现步骤

    下面我将详细讲解 “VSCode搭建vue项目的实现步骤”的完整攻略。整个过程包括: 安装Node.js 安装Vue CLI 创建Vue项目 配置VSCode开发环境 运行Vue项目 示例说明 1. 安装Node.js 首先,需要在电脑上安装Node.js,以便在命令行终端中使用npm安装Vue CLI和其他必要依赖项。Node.js的官方安装包可以在官网下…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部