JavaScript代理模式之四大代理

JS设计模式之代理模式 Star这个类就是明星,StarProxy这个类就是明星经纪人,假如我们是商家,现在我们想请这个明星来参加我们的活动,我们开始和经纪人谈价格,talk出价1w,此时经纪人会做一个判断,如果价格大于等于1w,这个活动就比较适合,可以参加,代理就会去通知明星演出,如果小于1w的话,就不会,这个就是简单的代理模式,我们要访问明星,需要经过经纪人(也就是代理),才能去访问。其实就是给一个对象提供一个代理,如果要访问这个对象必须经过这个代理,先说,这个模式的优点是什么。 阅读详情

JavaScript设计模式中有一种模式为代理模式

事件代理

事件代理是代理中最常见的一种,也是一道实打实的高频面试题,它的场景是一个父元素下有多个子元素。

考虑到事务具有冒泡性,当我们点击a标签的时候,会冒泡到父级。从而被监听。我们则只需要给父级绑定一个监听事件即可。

<!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>事件代理</title>
</head>
<body>
  <div id="father">
    <a href="#">链接1号</a>
    <a href="#">链接2号</a>
    <a href="#">链接3号</a>
    <a href="#">链接4号</a>
    <a href="#">链接5号</a>
    <a href="#">链接6号</a>
  </div>
</body>
</html>

document.getElementById('father').addEventListener('click', function (e) {
    e.preventDefault()
    console.log(e.target.tagName == 'a' && alert(e.target.inerHTML))
})

虚拟代理

懒加载:它是针对突破加载时机的优化,在一些图片量比较大的网站,如:电商网站首页,团购网站,小游戏首页等。如果我们尝试在用户打开页面的时候就把所有的图片资源加载完毕,那么很有可能会造成白屏、卡顿。

预加载:它主要是为了避免网络不好的时候,或者图片过大时,页面长时间给用户留白的尴尬,常见的操作是先让这个img标签展示一个展位图,然后创建一个image实例,让这个image实例的src指向真实的目标图片地址。观察image实例的加载情况,当其对应的真实图片加载完毕后,就已经有了该图片的缓存内容,再将DOM上的img元素的src指向真实的目标图片地址,此时我们直接去取目标图片的缓存,所以会非常快。从展位图到目标图片的事件会非常小。

let myImage = function () {
    let img = document.createElement('img');
    document.body.appendChild(img);
    return {
        setSrc ( src ) {
            img.src = src;
        }
    }
}();
proxyImage = function () {
    let img = new Image;
    img.onload = function () {
        myImage.setSrc( this.src );
    }
    return {
        setProxyImage( src ) {
            myImage.setSrc("https://img.zcool.cn/community/01e2115d5d5c7da80120695c137bfb.jpg@1280w_1l_2o_100sh.jpg"); // 此处为加载 loading 图片,用来占位,本地图片(作者使用网络图片)
            img.src = src;
        }
    }
}();
proxyImage.setProxyImage("https://img.zcool.cn/community/01a5d45543cd170000019ae94fc087.jpg")

缓存代理

在一些计算量较大的场景下,我们需要用空间换时间,例如:当我们需要用到某个已经计算过的值的时候,不想再耗时进行二次计算,而是希望能够从内存中去取现成的计算结果,这种场景下,就需要一个代理来帮我们进行计算的同时,缓存计算结果。

// addAll方法会对你传入的所有参数做求和操作
const addAll = function() {
    console.log('进行了一次新计算')
    let result = 0
    const len = arguments.length
    for(let i = 0; i < len; i++) {
        result += arguments[i]
    }
    return result
}
 
// 为求和方法创建代理
const proxyAddAll = (function() {
    // 求和结果的缓存池
    const resultCache = {}
    return function() {
        // 将入参转化为一个唯一的入参字符串
        const args = Array.prototype.join.call(arguments, ',')
        
        // 检查本次入参是否有对应的计算结果
        if(args in resultCache) {
            // 如果有,则返回缓存池里现成的结果
            return resultCache[args]
        }
        return resultCache[args] = addAll(...arguments)
    }
})()

保护代理

就是使用proxy来进行代理,保护另一个对象的一部分东西。

// 珍爱网
const 珍爱网 () {
    const BlindDate () { // 发起相亲请求
        return '你们开始相亲了'
    }
    return {join}
}
 
const 系统 (你的信息) {
    this.你的信息 = 你的信息
    const 判断资格 = function () {
        if( 你的信息.年龄  < 20){
            return "年龄不够资格,不允许相亲"        
        }else{
               珍爱网().BlindDate()     
        }
    }
    return 判断资格
}
 
console.log(系统({姓名:小孩子,年龄:19});

散户渡劫指南:从炼气期到化神期的量化之路 经常有人问我普通人怎么学习量化交易,我就在想怎么学了量化就不是普通人了吗,可能他的意思是类比修仙,量化素人如何修炼进阶,今天就将量化学习每个阶段均对标修仙境界的核心能力与心法要诀一一介绍,助你从“交易凡人”蜕变为“量化金仙”。 阅读详情

相关推荐

ARM Cortex-M系列授权解析:从研发到量产的免费与付费之路

本文深入解析了ARM Cortex-M系列内核从研发到量产过程中的授权模式。研发阶段可利用ARM DesignStart等免费资源进行原型验证,但产品商业化量产则需支付授权费与版税。文章对比了采购商用MCU与自研芯片的成本差异,并探讨了RISC-V作为免费替代方案在IoT领域的应用前景与挑战,为开发者提供了清晰的选型指南。

weixin_29292431的博客 493

JavaScript 设计模式 —— 代理模式

包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。

梅花寺 537

Ubuntu18.04环境搭建与疑难解析:从零复现YOLO-6D姿态估计算法

本文详细介绍了在Ubuntu18.04环境下从零开始复现YOLO-6D姿态估计算法的完整流程,包括系统配置、Conda环境搭建、PyTorch安装、依赖项管理、源代码获取、数据集准备以及训练验证过程。针对Singleshotpose算法的特殊需求,提供了详细的疑难解析和性能优化技巧,帮助开发者高效完成算法复现和应用部署。

weixin_30369041的博客 453

JavaScript系列——Proxy(代理)

也就是说,通过创建一个对象的代理(中间人)后,我们需要先和代理沟通,由代理再对原对象进行沟通,这个过程,允许我们自定义一些操作,实现对原对象的增强。通过上面的简单示例,我们发现,在定义handler 的属性中,我们可以通过方法的参数,获取到一些值,下面对一些常用的方法进行详细讲解。通过代理,验证一个对象的age 属性,如果设置成非数字或者大于200都会出错,不能成功被赋值,代码如下所示。并为对象的a 属性赋值了1,给b属性赋值了undefined ,注意,通过代理,我们可以对传入的值进行验证,可以借助。

2901

避坑指南:海康MV_CC_SetIntValue接口的7个典型报错解决方案

本文深度解析海康工业相机SDK中MV_CC_SetIntValue接口的典型报错,提供7个实战解决方案。针对MV_E_CALLORDER、MV_E_PARAMETER等高频错误码,从设备状态、参数值域、依赖关系等核心约束入手,给出清晰的诊断流程与根治代码,帮助开发者构建健壮的参数设置模块,提升开发效率。

y2z3a4b5c的博客 1076

pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]‘ is not a valid editable requirement解决方案

本文主要介绍了pip install安装markitdown时出现ERROR: ‘packages/markitdown[all]’ is not a valid editable requirement解决方案,希望能对使用markitdown的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 2万+

JS代理Proxy

JS代理Proxy 代理是目标对象的抽象。目标对象既可以直接被操作,也可以通过代理来操作。 但直接操作会绕过代理施予的行为。 首先就是空代理,就是什么也不做,在代理对象上执行的所有操作都会无障碍地传播到目标对象。 代理是使用 Proxy 构造函数创建的。这个构造函数接收两个参数:目标对象和处理程序对象。缺少其中任何一个参数都会抛出 TypeError。 我们来看看例子 const a = { name: 'Sonic' }; const handler = {}; const proxy = n

SOUIC的博客 4817

成本中心(CO)和利润中心(PCA)是管理会计模块的核心组件

SAP中成本中心(CO)和利润中心(PCA)凭证处理存在差异:①外部交易(如费用支付、销售)会生成FI借贷凭证;②内部成本分摊和转移仅产生CO/PCA管理凭证,通过次级成本要素或利润中心转移科目记录,不涉及FI模块。核心区别在于是否涉及企业实际收支:实际收支触发FI凭证,内部核算仅生成管理会计凭证。系统通过这种机制实现财务会计与管理会计的集成与分离。

金牌架构师 1127

JS中的Proxy代理详解

该方法主要是用于拦截 new 操作符的,我们通常使用 new 操作符都是在函数的情况下,但是我们不能说 new 操作符只能作用与函数,确切的说 new 操作符必须作用于自身带有[[Construct]]内部方法的对象上,而这种对象通常就是函数,总之一句话,使用 new targe 是必须有效的。它是一个对象,该对象的属性通常都是一些函数,handler 对象中的这些函数也就是我们的处理器函数,主要定义我们在代理对象后的拦截或者自定义的行为。因为我们所有的拦截操作都是通过这个对象里面的函数而完成的。

m0_37394102的博客 3518

动态规划之【树形DP】第3课:树形DP应用案例实践2

动态规划之【树形DP】第3课:树形DP应用案例实践2

王老师青少年编程 759

Win11 1 月更新黑屏循环故障技术分析与解决方案

2026年1月30日Windows 11更新引发黑屏循环故障,主要影响2018年前出厂、采用MBR分区及特定BIOS固件的设备,尤其对使用经典版Outlook(POP协议)的用户影响显著。故障表现为系统无限重启黑屏,导致数据访问中断。分析表明,问题源于硬件兼容性、分区格式与系统更新的交互冲突。解决方案包括进入安全模式回滚更新、暂停自动更新、升级驱动/BIOS,以及等待微软官方补丁。建议用户更新前评估硬件兼容性并备份数据,企业环境应建立分阶段更新测试机制。该事件为系统更新风险管理提供了重要参考。

博客 1441

JavaScript 代理

文章目录创建代理对象Proxy handlerget() handlerset() handler代理的使用1. 验证2. 对象的只读视图3. 副作用参考文档     在本教程中,您将借助示例了解 JavaScript 代理。     在 JavaScript 中,proxy(代理对象)用于包装对象并将各种操作重新定义到对象中,例如读取、插入、验证等。代理允许您向对象或函数添加自定义行为。 创建代理对象     代理的语法是: new Proxy(target, handler);     这里, ne

运维狗的备忘录 1378

FOC高频注入量产级C语言实现方案

高频注入技术是无传感器FOC实现零速和低速控制的关键方法,解决了传统反电动势观测器在低速失效的问题。该技术通过向电机注入高频电压信号,利用永磁同步电机凸极性特性,从高频电流响应中解调出转子位置信息。文章详细介绍了三种主流高频注入方法(旋转电压注入、脉振电压注入和脉振电流注入)的原理及实现流程,重点分析了脉振电压注入的信号处理步骤和位置观测器设计。同时提供了完整的C语言实现代码,包括硬件抽象层、核心算法模块(坐标变换、电流环、SVPWM等)和系统集成方案,并给出量产优化建议和安全保护机制。这套方案适用于要求高

汽车软件开发 791

pace.js 原理(转)

pace.js监控了什么: pace.js对于加载进度监控了什么呢?通过阅读源码,我们看到整体的进度有四个部分组成:document,elements,eventLag和ajax这四种监视器(Monitor)。 1. 那接下来就来看看它们分别是什么。 首先是document。document就是我们所熟悉的HTMLDocument节点。document节点有一个事件,onr...

dglf54292的博客 305

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Ruff 规则选择器优先级全解:select / ignore 与类别、linter 组、前缀、规则码的组合规则

规则选择器(rule selector)决定了一条 lint 规则是否被启用,是掌握 Ruff 规则治理体系的入口。Ruff 允许你在同一份配置里混用**语义类别**(如 `correctness`、`suspicious`)、**linter 组**(如 `F`、`UP`、`RUF`)、**linter 前缀**(如 `F4`)以及**单条规则**(如 `F401`,或人类可读名称 `unuse

gitblog_00275的博客 1083

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

浅析JavaScript设计模式——代理模式

代理模式 为一个对象提供一个代用品或占位符,以便控制对它的访问 好久没有写设计模式的文章了 今天要写的代理模式可能内容要多一些 代理模式非常有用,代理模式也分为很多很多种,我只谈一些常见并且简单的 思想其实都是一样的 代理这个词我们并不陌生,在生活中例子也很多,比如,经纪人… 当我们不方便直接访问一个对象或者访问对象不满足我们需求的时候 我们可以把这个对象的控制权交给一个代理对象,

尐轩web前端网络日志 2899

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JavaScript设计模式之代理模式

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如,明星都有经纪人作为代理。如果想请明星来办一场商业演出,只能联系他的经纪人。经纪人会把商业演出的细节和报酬都谈好之后,再把合同交给明星签。 代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问...

wuyufa1994的博客 1662

JavaScript设计模式 -- 代理模式

代理模式是一种结构型设计模式,其核心思想是在访问目标对象(真实对象)时,通过一个中间层(代理对象)来控制对真实对象的访问。代理对象与真实对象具有相同的接口,因此客户端无需改变代码即可使用代理对象。延迟加载:在真正需要使用对象时才创建或加载对象(虚拟代理)。权限校验:在调用真实对象方法前进行安全性检查(保护代理)。缓存:对真实对象的调用结果进行缓存,提高系统性能(缓存代理)。日志记录和监控:记录对真实对象的调用情况,便于调试和监控。

u014676858的博客 1521

JS代理模式

JS代理模式是一种结构性设计模式,它允许你在访问对象之前或之后添加额外的逻辑或控制。JS代理模式是面向对象编程范式中的一个关键概念,它也是JavaScript中最常见的设计模式之一。本文将探讨JS代理模式的工作原理、使用方法和常见应用场景。总之,JS代理模式是一种十分实用的设计模式,在实际开发中有着广泛的应用场景。通过代理模式,可以更好地控制和管理对象的访问,提高程序的效率和可维护性,使程序更加健壮和安全。

weixin_45523520的博客 1370

js设计模式——代理模式proxy

什么是代理模式代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。(可以想象一下明星与经纪人的关系,明星是请求的本体,经纪人就是代理proxy)如何实现代理模式代理对象内部含有对本体对象的引用,因而可以与调用本体的相关方法;同时,代理对象提供与本体对象相同的接口,方便在任何时刻代理本体对象。例子(上代码)代理模式的变体有很多,有:保护代理、虚拟代理、缓存代理、防火墙代理、远程代理、智能...

小熊的博客 6391

javascript设计模式三:代理模式

代理模式是一种对程序对象进行控制性访问的一类解决方案。 引入代理模式,其实是为了实现单一职责的面向对象设计原则。 单一职责其实就是指在一个类中(js中通常指对象和函数等),应仅有一个引起它变化的原因。这样会帮助程序设计具有良好的健壮和高内聚特性,从而当变化发生时,程序设计会尽量少的受到意外破坏。 代理模式有多种方法,保护代理、远程代理、虚拟代理、缓存代理等。 但在javascript中,代理模式最...

一期一会的博客 1653

常见JavaScript 代理模式应用场景解析

代理模式是 JavaScript 开发中不可或缺的工具,它通过拦截和增强对象行为,帮助开发者实现更灵活、安全、可维护的代码。无论是数据验证、权限控制,还是响应式数据绑定,代理模式都能提供优雅的解决方案。随着现代前端框架(如 Vue 3 的Proxy响应式系统)的广泛应用,掌握代理模式将成为开发者进阶的重要一步。动手实践:尝试在你的项目中使用代理模式,拦截和增强对象的行为,体验其带来的灵活性与强大功能!

JakeMa1024的博客 1365

javascript 代理模式

代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。 实例一、图片懒加载 图片懒加载是指,图片的加载应该在页面全部加载完后,再去加载。这样能够提高加载的速度和网页的体验性。实际操作就是,将原来网页的src独立出来,将原来图片使用一个loading.gif代替,然后在js里面手动创建个img去加载这个src,当加载完后把src替换就可以了。 var myImage=(funct

franktaoge的博客 899

JS 基础篇(代理模式)

保护代理 <script> //主体,发送 function sendMsg(msg) { console.log(msg); } //代理 function proxySend(msg) { msg = msg.replace(/XT/, ''); sendMsg(msg); } ...

一点一滴 1万+

JavaScript 设计模式——代理模式

为其他对象提供一种代理以控制对这个对象的访问。JavaScript 中包括很多小分类,在JavaScript开发中最常用的是虚拟代理和缓存代理。我们在编写代码的时候往往不需要预先猜测是否需要使用代理模式,当真正发现不方便直接访问某个对象的时候,再编写不迟。

Starry_Firmament的博客 1060
上一篇: husky配置实现代码提交前校验与规范提交信息
下一篇: 学会这些思维框架,提高综合决策能力
jsPao
博客等级 码龄7年 549粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值