proxy代理面试题

1、动态属性值

const r1=add[1][2][3]+4//输出10
const r2=add[10][20]+30//输出60
const r3=add[100][200][300]+400//输出1000

柯里化,有参考下文
https://blog.csdn.net/p1967914901/article/details/127621032

add 是对象,通过链式传入属性求和返回结果,咱们会想到代理proxy

Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。

其中 target 是我们要代理的对象,handler 则是以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为。详细介绍请看 MDN 文档。

	let add = new Proxy({_store:0},{get(target, property, receiver) {target['_store'] += +propertyconsole.log(target['_store'])return receiver}});add[2][3][10]+3

运行到+3的时候,上面+p报错
在这里插入图片描述

其中 target 是目标对象,property 是被获取的属性名,receiver 是 Proxy 或者继承 Proxy 的对象。

let add = new Proxy({_store: 0},{get(target, property, receiver) {// console.log(property)//Symbol(Symbol.toPrimitive)// 遇到 + 的操作,会触发隐式类型转换if (property === Symbol.toPrimitive) {return () => {return target['_store']}} else {target['_store'] += +property// console.log(target['_store'])return receiver}}});console.log(add[2][3][10] + 3)

2、以同步的方式实现事件监听

生产环境不要写,仅做扩展

// 请完成getElement函数让后续程序顺利执行,cssSelector为css选择器
function getElement(cssSelector) {}
(async () => {const btn = getElement('button')while(1) {await btn.waitClick;//这里的async await在消除事件回调console.log('按钮被点击了')}
})()
 function getElement(cssSelector) {const dom = document.querySelector(cssSelector)return dom };//这样写的话相当于题目中 await btn.waitClick=await undefined=await Promise.resolve()
 function getElement(cssSelector) {const dom = document.querySelector(cssSelector)dom.waitClick=new Promise((resolve)=>{dom.click=resolve})return dom };
//不太通用,waitClick,waitFocus
 <button>以同步的方式实现事件监听</button>// 请完成getElement函数让后续程序顺利执行function getElement(cssSelector) {const dom = document.querySelector(cssSelector)// 使用Proxy代理dom,拦截所有属性访问,实现事件监听const proxy = new Proxy(dom, {get(target, key) {// 若发现属性非wait开头,则返回原始对象if (!key.startsWith('wait')) {return Reflect.get(target, key)}// 截取wait后面的字符串并转换为小写,既为事件名称const eventName = key.replace('wait', '').toLowerCase()// 返回一个Promise,当事件触发时resolvereturn new Promise((resolve) => {// 事件只需要监听一次即可dom.addEventListener(eventName, resolve, { once: true })})},})return proxy};(async () => {const btn = getElement('button')//   while (1) {//     await btn.waitClick//     console.log('按钮被点击了')//   }// 仅仅监听10次for (let i = 0; i < 10; i++) {await btn.waitClickconsole.log('按钮被点击了')}})()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/320595.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蛋白质/聚合物防污的机器学习(材料基因组计划)

前言&#xff1a;对于采用机器学习去研究聚合物的防污性能&#xff0c;以及或者其他性质。目前根据我的了解我认为最困难的点有三条&#xff1a; 其一&#xff1a;数据&#xff0c;对于将要训练的数据必须要有三点要求&#xff0c;1.数据要多&#xff0c;也就是大数据&#xff…

毕设:邮件分发系统

文章目录 前言一、登录1.邮箱登录2.账号登录 二、注册三、首页四、写邮件五、收邮件六、草稿箱七、垃圾箱八、已发送九、通讯录十、用户管理十一、邮件管理十二、登录日志总结 前言 分享一下邮件分发系统 一、登录 1.邮箱登录 2.账号登录 二、注册 三、首页 首页有邮件信息&…

【蓝桥杯备赛国赛】5-5

文章目录 求阶乘双子数 求阶乘 求阶乘 分析k的范围&#xff0c;10的18次方。这个数字很大 想要末尾有0的存在必须要2和5&#xff0c;但是通过分析2的数目应该是远远多于5的&#xff0c;所以只要5的数目够多即可。所以for循环的层次也是10的九次方以上&#xff0c;必然会超时&…

光端机(2)——光纤通信学习笔记九

学习笔记里面只关注基本原理和概念&#xff0c;复杂的公式和推导都没有涉及 光端机 光发射机 作用&#xff1a;实现电光转换。将来自电端机的电信号对光源发出的光波进行调制&#xff0c;然后将调制好的光信号耦合到光线中传输。 基本性能要求 1.合适的发光波长&#xff08;光…

GateWay检查接口耗时

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency>创建一个LogTimeGateWayFilterFactory类&#xff0c;可以不是这个名字但是后面必须是x…

webstorm 常用插件

安装插件步骤&#xff1a; 打开软件&#xff0c;文件 -- 设置-- 插件 -- 输入插件名称 -- 安装 代码截图: code screenShots 先选中代码&#xff0c;按 ctrl shift alt a&#xff0c;就可截取选中的代码颜色注释: comments highlighter 对注释的文字改变颜色高亮成对符号: h…

设计模式Java实现-建造者模式

楔子 小七在2019年的时候&#xff0c;就想写一个关于设计模式的专栏&#xff0c;但是最终却半途而废了。粗略一想&#xff0c;如果做完一件事要100分钟&#xff0c;小七用3分钟热情做的事&#xff0c;最少也能完成10件事情了。所以这一次&#xff0c;一定要把他做完&#xff0…

【前端】HTML实现个人简历信息填写页面

文章目录 前言一、综合案例&#xff1a;个人简历信息填写页面 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及CSS、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&#xff1a; Web前端学习专栏 下面我对…

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代&#xff0c;随着人们购物习惯的转变&#xff0c;传统的实体商店已经无法满足人们日益增长的在线购物需求。因此&#xff0c;基于SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架的运动用品商城项目应运而生&#xff0…

LearnOpenGL(七)之摄像机

一、摄像机/观察空间 当我们讨论摄像机/观察空间(Camera/View Space)的时候&#xff0c;是在讨论以摄像机&#xff08;人&#xff09;的视角作为场景原点时场景中所有的顶点坐标&#xff1a;观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。要定义一个摄像机…

探索Kimi模型AI:革新人工智能的未来

探索Kimi模型AI&#xff1a;革新人工智能的未来 人工智能&#xff08;AI&#xff09;技术的发展已经取得了巨大的进步&#xff0c;为我们的生活带来了许多便利和创新。在这个充满活力和竞争的领域中&#xff0c;Kimi模型AI以其独特的设计和功能吸引了人们的注意。本文将深入探…

final关键词

基本介绍 final 中文意思是&#xff1a;最后的&#xff0c;最终的final可以修饰 类、属性、方法和局部变量何时会用到final&#xff1a; 1&#xff0c;当不希望类被继承时&#xff0c;可以用final修饰 2&#xff0c;当不希望父类的某个方法被子类覆盖/重写&#xff08;overrid…

矩阵式键盘的控制

键盘扫描是最 为常用的工作方式&#xff0c;扫描方式又可分为程序程扫描、定时扫描和中断扫描。程序扫描是指在 特定的程序位置段上安排键盘扫描程序读取键盘状态。定时扫描是指利用单片机内部或扩展 的定时器产生定时中断&#xff0c;在中断中进行键盘扫描的工作方式。中断扫描…

全国产业园运营排名前十!树莓集团助推载体运营高质量发展

树莓集团&#xff0c;作为数字产业生态链的杰出建设者&#xff0c;以及在全国产业园运营中名列前茅的领航者&#xff0c;其独特的集团核心文化——高效、友善、敢为&#xff0c;成为了推动其不断前行的强大动力。树莓集团深谙在数字化时代&#xff0c;政、产、企、校四个板块之…

硬件设计 之 压敏电阻简单介绍

1. 什么是压敏电阻&#xff08;Varistor Voltage&#xff09;&#xff1a; 压敏电阻&#xff08;Varistor&#xff09;是一种特殊类型的电阻器件&#xff0c;具有非线性电阻特性。它的主要作用是保护电子电路免受过电压或过电流的损害。 测定电流为1mA&#xff0c;此时TNR端子…

纯血鸿蒙APP实战开发——页面间共享组件实例的案例

介绍 本示例提供组件实例在页面间共享的解决方案&#xff1a;通过Stack容器&#xff0c;下层放地图组件&#xff0c;上层放Navigation组件来管理页面&#xff0c;页面可以共享下层的地图组件&#xff0c;页面中需要显示地图的区域设置为透明&#xff0c;并参考触摸交互控制&am…

HTML_CSS学习:定位

一、相对定位 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>相对定位</title><style>.outer{width: 500px;background-color: #999ff0;border: 1px solid #000;p…

BEV下统一的多传感器融合框架 - FUTR3D

BEV下统一的多传感器融合框架 - FUTR3D 引言 在自动驾驶汽车或者移动机器人上&#xff0c;通常会配备许多种传感器&#xff0c;比如&#xff1a;光学相机、激光雷达、毫米波雷达等。由于不同传感器的数据形式不同&#xff0c;如RGB图像&#xff0c;点云等&#xff0c;不同模态…

【Docker学习】docker start深入研究

docker start也是很简单的命令。但因为有了几个选项&#xff0c;又变得复杂&#xff0c;而且... 命令&#xff1a; docker container start 描述&#xff1a; 启动一个或多个已停止的容器。 用法&#xff1a; docker container start [OPTIONS] CONTAINER [CONTAINER...] 别名&…

标准IO学习

思维导图&#xff1a; 有如下结构体 struct Student{ char name[16]; int age; double math_score; double chinese_score; double english_score; double physics_score; double chemistry_score; double bio_score; }; 申请该结构体数组&#xff0c;容量为5&#xff0c;初始…