ES6知识点整理Proxy的应用

ES6面试题整理 阅读详情

Proxy 用于修改对象某些操作的默认行为,可以对外界的访问进行过滤和改写,其概念类似于元编程。
Proxy 让我们可以对任何对象的绝大部分行为进行监听和干涉,实现更多的自定义程序行为。在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截。

目前【兼容性】存在一定的问题,目前在chrome和ff浏览器中的非严格模式下可用,一些先进的技术即使在目前不能广泛应用,但随着时间的流逝,都将会进入程序员日常的编程中。

注: 博客整理时间:2018-03-24 16:21:15

初识Proxy

var obj = {name:'Joh'};
var proxy = new Proxy(obj, {
  get (target, key) {
    return 'test1';
  },
  set (target, key, value) {
    target[key] = value
  }
});

console.log(proxy.name); // test1 进行get取值
proxy.name = 'test2'; // 进行set设置
console.log(obj.name); // test2

通过Proxy对象进行拦截target对象的属性

完整的使用Proxy进行设置, 获取,修改和删除的案例

var obj = {name:'Joh',group:'g1',_type:'student'};
var proxy = new Proxy(obj, {
  get (target, key) {
    if(key[0]!== '_') {
      // return Reflect.get(target,key); // 效果等同于下面的return语句
      return target[key];
    };
  },
  set (target, key, value) {
    if(key[0]!== '_') {
      // Reflect.set(target,key,value);
      return target[key] = value;
    }
  },
  deleteProperty(target, key) {
    // 业务逻辑
    if(key[0] !== '_') {
      // Reflect.deleteProperty(target, key);
      delete target[key];
    }
  }
});

console.log(proxy.name); // Joh
console.log(obj.name); // Joh
proxy.name = 'Lily'; // 在非严格模式下的赋值操作,严格模式将会报错
console.log(obj.name); // Lily

delete proxy.name; // 未能成功删除,因为上面内部有判断
console.log(obj.name); // undefined 成功删除
delete proxy.group;
console.log(obj.group); // undefined 成功删除
delete proxy._type;
console.log(obj._type); // student

proxy.color='red';
console.log(obj.color); // red

其中借助Reflect实现和直接实现的效果等同

通过has方法和in关键字进行拦截的示例:

var obj = {name:"Joh",_name:"Lily"};

var proxy = new Proxy(obj, {
  has(target, key) {
    if(key[0] === '_'){
      return false;
    } else {
      return key in target;
    }
  }
});

console.log('has name attr: ', 'name' in proxy); // has name attr: true
console.log('has _name attr: ', '_name' in proxy); // has _name attr: false

使用ownKeys方法与for-in遍历过滤符合特定规则属性的示例

var obj = {name:"Joh",_name:"Lily", age:10, group:"g1"};
var proxy = new Proxy(obj, {
  ownKeys (target) {
    return Reflect.ownKeys(target).filter(key => key[0] !== '_');
  }
});

for(var k in proxy) {
  console.log(k); // 分别输出 name age group 过滤了 _name
}

通过apply方法对函数调用的拦截

function test() {
  console.log('hello world');
}

var proxyFun = new Proxy(test,{
  apply(target,ctx,args) {
    console.log('proxy apply');
    return Reflect.apply(target,ctx,args);
  }
});

proxyFun(); // 分别输出 proxy apply 和 hello world
// proxyFun.apply(); // 同样,分别输出 proxy apply 和 hello world
// proxyFun.call(); // 同样,分别输出 proxy apply 和 hello world

通过construct方法对构造函数实例化的拦截

function User() {
  console.log('this is a contructor');
}

var ClassProxy = new Proxy(User, {
  construct(target,args) {
    console.log('proxy construct');
    return Reflect.construct(target,args);
  }
});

new ClassProxy(); // 分别输出 proxy construct 和 this is a contructor
银河麒麟V10系统下VLC播放器安装全攻略(附3.0.9.2版本离线包下载) 本文详细介绍了在银河麒麟V10操作系统无网络环境下,从零开始编译安装VLC 3.0.9.2播放器的完整攻略。通过构建本地YUM仓库解决依赖问题,提供离线资源包下载,并逐步指导完成编译环境配置、软件编译与安装,帮助用户在国产麒麟系统上成功部署强大的多媒体播放能力。 阅读详情

相关推荐

自举电容的工作原理-3句话总结

1、一道面试题 照例,先抛出来一道面试题:“Buck电路的SW引脚通常会放置一颗小电容,这颗电容有什么用?”。这个问题问得比较细,非常考验被面试者的硬件基本功。 2、似懂非懂的答案 有小伙伴可能不太清楚这颗电容的作用,回答不上来。也有小伙伴脱口而出:自举电容,用来做升压的。但后面好像说不出来具体逻辑。 没具体了解过,答不上来,也没啥可惜的。但是了解过一点,但又似懂非懂的这种,给出的答案只是轻轻点水或者千篇一律,那无疑是错过了一个加分项。 3、异步Buck的自举环路组成 既然是针对Buck电路讲自举电容,前面

ltqdxl的博客 3万+

new Proxy()代理

new Proxy()代理

qq_36453396的博客 1万+

Matlab实战:如何用MMG方程预测船舶轨迹(附完整代码)

本文提供了一份基于MMG方程的Matlab实战指南,详细讲解了如何从零构建船舶轨迹预测模型。内容涵盖MMG模型的核心原理、Matlab代码框架设计、动力学函数实现、参数调优与验证方法,并附有完整代码示例,帮助工程师和研究者快速掌握这一船舶操纵性预测的关键技术。

v6b7n8m9q0的博客 524

Proxy详解

Proxy的创建、应用,Proxy的拦截操作说明,Proxy的this指向问题、Proxy.revocable()创建可取消的Proxy实例。

分享互联网的有趣知识~ 6233

Ubuntu20.04/Debian10安装向日葵远程控制踩坑实录(附依赖问题解决方案)

本文详细介绍了在Ubuntu 20.04/Debian 10系统上安装向日葵远程控制软件的全过程,重点解决了常见的依赖问题,特别是libwebkitgtk相关错误。通过自动修复、手动修改.deb包依赖和使用兼容层三种解决方案,帮助用户顺利完成安装并优化远程控制体验。

silver的专栏 753

AI驱动的iOS逆向工程自动化:14阶段工作流与Ghidra集成实践

逆向工程是软件安全分析的核心技术,通过反汇编、调试等手段解析程序内部逻辑与数据流。其原理在于将编译后的二进制代码还原为可理解的逻辑结构,从而发现潜在漏洞或理解软件行为。在移动安全领域,iOS逆向工程具有重要技术价值,能够用于安全审计、漏洞挖掘与恶意软件分析。传统iOS逆向依赖ipsw、class-dump、Frida等工具链组合,存在学习曲线陡峭与流程碎片化问题。本文介绍的ios-reverse-skills项目创新性地将14阶段逆向工程方法论封装为AI可调用的标准化脚本集,通过Ghidra脚本实现Swif

weixin_27268733的博客 436

new Proxy 简介入门

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Do.

web修理工 1103

Pixhawk+OpenMV实战:如何用Apriltag实现无人机自动降落(附避坑指南)

本文详细介绍了如何利用Pixhawk飞控和OpenMV摄像头,通过Apriltag视觉标签实现无人机的精准降落系统。从硬件搭建、参数配置到视觉处理代码优化,提供了完整的实战指南和避坑建议,帮助开发者快速实现厘米级精度的自动降落功能。

weixin_27076351的博客 483

Vue 55 ,Vue2 和 vue3 中双向数据绑定的原理,JavaScript的 Object.defineProperty 和 ES6的 Proxy 对象代理,使用详细

⭐Object.defineProperty大家都知道,是一个强大且常用的方法,用于定义对象属性,允许我们精确地控制属性的行为,包括读取、写入和删除等操作; Proxy是ES6中一种用于创建代理对象的特殊对象,它允许我们拦截并自定义目标对象的操作,例如属性访问、赋值、函数调用等。Proxy提供了一种机制,可以在目标对象上设置拦截器,从而拦截对目标对象的操作。

AI Agent 全栈架构师(AI + GIS + Backend)& 数字芯片系统架构师(FPGA),NorthCity Smile的博客(NcSmile,博主域名:https://ncmile.blog.youkuaiyun.com) 2381

计算机三级考试嵌入式系统重点精简汇总

第一章 嵌入式系统概论 1.1.1嵌入式系统 (1)特点:(1)专用性;(2)隐蔽性;(3)资源受限;(4)高可靠性;(5)实时性;(6)软件固化。 (2)应用:(1)冰箱、洗衣机、电饭煲、空调、摄影机、DVD播放器等;(2)数控机床、飞机、汽车、电梯、X光机、血压计等;(3)电话机、传真机、打印机、pos机、GPS导航仪、路由器等。 1.1.2嵌入式系统组成与分类 (1)逻辑组成:硬件和软件,分为处理器、存储器、I|0设备与I|O接口,数据总线; (2)处理器:分为主处理器(CPU)和协处

chemkrik的博客 1万+

Windows部署OpenClaw报错不断?这篇环境配置指南帮你解决难题

想在Windows上部署OpenClaw却频频报错?🔧 本文详细梳理了OpenClaw部署必需环境的安装步骤和官方下载地址 📦,提供完整的验证清单和常见问题排查方法,帮你一次性搞定所有环境配置,顺利部署OpenClaw ✅

XiaoqiangClub的博客 6660

使用new Proxy,自定义object的setter 和getter,Proxy 和 Object.defineProperty 的区别,Reflect 对象是啥

proxy

有一棵树的博客 3050

华为OD机试 - 机器人活动区域(Java 双机位C卷 200分)

现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。之后M行表示网格数值,每行N个数值(数值大小用k表示),数值间用单个空格分隔,行首行尾无多余空格。说明:图中绿色区域,相邻网格差值绝对值都小于等于1,且为最大区域,对应网格点数目为6。M、N、k均为整数,且1

学Java,找哪吒 916

整理学习——ES6的Proxy

文章目录概述 概述 Proxy对象用于定义基本操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。是一个用来代理基本操作的对象。可以利用它来过滤和改写用户的某些操作。 ...

shaliwang的博客 854

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ES6新特性整理

欢迎访问我的博客https://qqqww.com/,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~ 声明:本文参考文章如下: 业界大佬阮一峰老师的ES6标准入门 一位道友的[理解 JavaScript 中的 for…of 循环](https://www.cnblogs.com/m2maomao/p/7743143.html) github上的You-Dont-Know-JS Babe...

王工头的博客 7068

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ES6面试、复习干货知识点汇总(全)

近期在复习ES6,针对ES6新的知识点,以问答形式整理一个全面知识和问题汇总。(全干货,适合对ES6有一定理解的同学复习,以及ES6面试。) 一、问:ES6是什么,为什么要学习它,不学习ES6会怎么样? 答: ES6是新一代的JS语言标准,对分JS语言核心内容做了升级优化,规范了JS使用标准,新增了JS原生方法,使得JS使用更加规范,更加优雅,更适合大型应用的开发。学习ES6是成为...

前端码农 2941

ES6 逐点突破系列 -- Proxy

ES6 逐点突破系列 – Proxy 文章目录ES6 逐点突破系列 -- Proxy概述方法Proxy.revocable()this 问题 以下内容整理自 阮一峰Proxy - ECMAScript 6入门 概述 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。 var proxy = new Proxy(target, handler); 注意,要使得Proxy起作用,必须针对Proxy实例(上例是p

前端彭于晏的博客 5590

es6知识点整理

es6是什么及兼容性 es6是什么 ECMAScript 6.0(以下简称 ES6) 是 JavaScript 语言的下一代标准,已经在 2015年 6月 正式发布了,它的目标,是使得JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 为什么使用es6 新语法糖能提高编码效率,语法更优雅 对于js继承的实现,异步的操作有了更好的解决方案 目前主流的前端框架都使用es6,例如react,vue 微信小程序、支付宝小程序、uni-app等跨平台框架也都在使用es6 面试必问的考

C_jiayouya的博客 302

es6 filter函数的用法_ES6语法重点整理

目录:数组、函数、Symbol和对象Proxy和ReflectGenerator函数和Promise对象Class、ModuleES6简介:ECMAScript6是JavaScript语言的下一代标准,在2015年6月正式发布。其目标是使JavaScript语言可用于编写复杂的大型应用程序,成为企业级开发语言。本文参考:《ES6 标准入门》阮一峰,《JavaScript权威指南》、JavaScri...

weixin_36444911的博客 1393

es6语法相关知识点整理

编译原理学习笔记

m0_47469819的博客 301

ES6的简单的整理与应用

小伙伴大多数还在使用ES5来进行编写,使用ES5这无可厚非,因为ES5毕竟还是主流,速度也更快,但ES6引入的新特性是ES5无法比拟的,接下来分享一下我掌握的es6 也为自己做个总结 ES6搭建环境(与语法没什么关系 可忽略) 现在的Chrome浏览器已经支持ES6了,但是有些低版本的浏览器还是不支持ES6的语法,这就需要我们把ES6的语法自动的...

前端小狮的博客 304

ES6 Proxy数据代理一分钟带你掌握

ES6 Proxy数据代理一分钟带你掌握

layneyao的博客 1582

ES6知识点整理之----Proxy----概述

1、用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。 可以理解成代理器:在目标对象之前架设一层“拦截”,可以对外界的访问进行过滤和改写。 var obj = new Proxy({}, { get: function (target, key, receiver) { cons...

ap1005233的博客 213

es6语法整理

// es6语法 // 变量let var // 常量const //数组、对象、字符串的解构赋值 //数组的解构赋值 let [a, [b, c], d] = [1, [2, 3], 4]; let [foo = true] = []; let [aa, bb = "hello"] = [null, "123"] // 对象的解构赋值 let {foos,bar} = {foo...

Dream_fengyuefei的博客 729

ES6常用知识点总结

  这片文章主要是基于阮一峰老师的ECMAScript 6 入门。在看了阮一峰老师的这ES6入门之后,自己做了一下总结,将一些觉得对自己目前有用的东西整理出来方便日后再来巩固复习。总觉得看别人的东西当时懂了过了一段时间就忘记了,所以我总是会将别人的东西验证一遍,这样对知识的理解是能提升一个层次的。 1、ECMAScript和JavaScript的关系以及ES6的含义? 2、let和const ...

大灰狼的小绵羊哥哥的博客 1312

ES6知识点整理之----Reflect

1、与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。Reflect对象的设计目的有这样几个。 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。 修改某些Object方法的返回结果,让其变得更合理。 让Object操作都变成函数行为。 Reflect对象的方法与Proxy对象的方法一...

ap1005233的博客 248

关于阅读 ES6- Proxy 整理的问题

1、Proxy是什么? 答:用来修改默写默认操作的行为,在语言层面上修改,是属于一种‘元编程’,即对编程语言进行编程。 Proxy可以理解成在目标对象前架设了一个‘拦截层’。外界想要访问这个对象,需要经过这层拦截, 因此proxy也被称为‘拦截器’。例如,在获取或添加某个对象的属性前进行拦截 var obj = new Proxy({b: 2}, { get: function(target, key, receiver){ // target是目标对象,key是对象属性 ,receiver是Pro

千里之行,始于足下! 1308
上一篇: ES6知识点整理函数对象参数的默认值及其解构的应用
下一篇: ES6知识点整理模块化的应用
Wang's Blog
博客等级 码龄12年 7438粉丝 2422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值