javaScript装饰模式

淘宝店铺装修CSS特效代码合集52种样式 提供多款图片滚动效果,使你的淘宝店铺更加生动 立即下载
装饰模式,让work函数本身不做任何修改的同,在其外部包裹一个额外的函数使其好像具备了新的额外的行为。
优点:1、装饰模式可以复用

             2、装饰模式可以灵活的组合

例子1

此处给work函数包裹外层函数后使其具有了一个日志功能,能记录并打印调用work时传递过的参数

  function work(a,b){
			//console.log(a+b);
			return a+b;
		}
		function makeLogging(f){
			var log = [];
			function tempFun(){
				log.push(arguments);
				return f.apply(this,arguments);//此处的return比较有意义,在work无返回值时(实际返回undefined)和有返回值时都能保持和原work相同的功能。(当work无返回值时无return也能与之保持一致)
			}

			tempFun.outPutLog = function(){
				for(var i=0;i<log.length;i++){
					console.log([].join.call(log[i],","));//arguments不是数组,这里借用数组的join方法
				}
			}
			return tempFun;
		}
		var work = makeLogging(work);
		console.log(work(1,2));//3
		console.log(work(2,3));//5
		work.outPutLog();//1,2  2,3
例子2

//原理类似上边的例子
//一个生成随机数的函数rand,通过装饰模式使其具有传入相同的参数返回相同的随机数,
 //并且有一个方法可以使这种机制重新开始

  function rand(arg){
			return Math.random() * arg;
		}
		
		function makeCache(f){
			var cache = {};
			function temp(arg){//检测cache中不存在新种子对应的随机数时,进行计算并将结果存入cache,每次返回cache中的值。以达到相同的种子返回相同的随机数
			//static方法用于清空cache,重新进行缓存
				if(!(arg in cache)){
					cache[arg] = f.call(this,arg);
				}
				return cache[arg];
			}
			
			temp.flush = function(){
				cache = {};
			}
			
			return temp;
		}
		
		rand = makeCache(rand);
		console.log(rand(1));
		console.log(rand(1));//相同的结果
		rand.flush();
		console.log(rand(1));//不同的结果


Windows 11 安装 Maven:下载、安装、配置国内镜像、验证 本文详细介绍了在 Windows 11 系统中安装与配置 Apache Maven 的完整流程,包括 JDK 环境准备、Maven 下载解压、本地仓库路径设置、阿里云国内镜像加速配置、环境变量设置及安装验证。同时提供了常用 Maven 命令速查表,帮助开发者快速上手依赖管理与项目构建,提升开发效率。 阅读详情

相关推荐

【通过STM32CubeMx配置LWIP+FreeRTOS并通过Socket实现TCP_Client/Sever】

生成KEIL工程之后,勾选上use MicroLIB,代码上暂时无需做其他修改,编译下载。由于使用了FreeRTOS,因此系统的TimeBase Source修改成TIM1。在CubeMx上面选择NUCLEO-F429ZI开发板,并采用默认配置。打开电脑命令行,去ping这设置好的IP,能够实现Ping通。使能LWIP,并且先禁用DHCP,设置好静态IP。修改defaultTask的栈大小。Platform选择LAN8742。修改堆栈大小,生成工程。使能FreeRTOS。

qq_42617357的博客 6112

JS设计模式之装饰器模式

在这个图片里面,ceshi函数this原本是指向window的,当我给他绑定到inp上的时候,function谁调用指向那个对象,此时ceshi输出的this就是input这个dom元素,同理,假如我有一个按钮,正常这个按钮的功能是当我点击他的时候,进行一个页面的跳转,但是现在我想给这个按钮加一个功能,就是让它跳转前,去上传一些数据。所以整体执行顺序为,在点击之前,我们使用装饰器模式给render添加了新功能,log,当我们点击按钮的时候,其实触发的函数,就是新的render.

MRDONG1的博客 1923

给麒麟KylinOS服务器加把锁:手把手配置符合等保要求的密码强度策略

本文详细介绍了如何在麒麟KylinOS服务器上配置符合等保要求的密码强度策略,包括pwquality.conf和login.defs的核心参数设置、等保合规的进阶配置技巧以及企业环境中的平衡艺术。通过实战案例和测试方法,帮助管理员构建坚固的密码防线,确保系统安全。

weixin_33749242的博客 419

Js设计模式

设计模式总的来说是一个抽象的概念,是软件开发人员在开发过程中面临的一般问题的解决方案。我们不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中那么这个函数就可以被视为一个工厂。适配器用来解决两个接口不兼容的情况,不需要改变已有的接口,通过包装一层的方式实现两个接口的正常协作。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在两个对象之间起到中介的作用。定义了对象间一对多的依赖关系,当目标对象的状态发生改变时,所有依赖它的对象都会得到通知。(3)、抽象工厂模式。

weixin_52663662的博客 578

手把手教你用Keil5和Proteus8给51单片机跑个流水灯(附完整源码+安装包)

本文详细介绍了如何使用Keil5和Proteus8为51单片机实现流水灯效果,包括开发环境配置、汇编代码编写、电路设计及仿真调试。通过完整的源码和安装包,帮助初学者快速掌握C51单片机开发的核心流程,适合嵌入式开发入门学习。

weixin_42632434的博客 372

VASP+Multiwfn+VMD静电势计算与可视化全流程解析

静电势是表征分子与材料表面电荷分布的关键物理量,它通过求解泊松方程,将电子密度与原子核电荷在空间中的贡献结合起来,直观揭示体系的电子富集与缺失区域。这一性质在理解化学反应活性、分子间相互作用(如氢键、卤键)以及材料表面性质方面具有重要价值。在计算材料科学与量子化学领域,基于第一性原理计算获得高精度电子结构数据后,如何将其转化为可直观分析的静电势图,是连接理论计算与物理解释的关键技术环节。本文聚焦于构建一条高效、可控的端到端工作流,详细解析如何利用VASP进行高精度电子密度计算,通过专业波函数分析软件Mult

weixin_33733810的博客 431

js中的设计模式之装饰者模式

装饰者模式也称为包装器模式,在不改变原有对象的基础上为其动态的添加上新的功能。

前端三脚猫的博客 901

Zotero搭配CNKI.js插件:一键批量下载知网文献的完整教程(附常见问题解决)

本文提供Zotero搭配CNKI.js插件实现知网文献批量下载的完整教程。详细介绍了从环境准备、插件安装到实战操作的全流程,并针对常见问题提供解决方案,旨在帮助科研人员高效构建自动化文献管理工作流,显著提升文献收集与整理效率。

e4f5g6h7的博客 1203

JS设计模式(3):装饰器模式

本文介绍了装饰器模式(Decorator Pattern)及其应用场景。该模式通过在运行时动态"包裹"目标对象,实现非侵入式的功能扩展,解决了核心逻辑与非核心功能(如错误处理、权限校验)紧耦合的问题。文章通过两个实际案例展示了装饰器模式的实现方式:使用闭包包装原函数,在调用前后添加额外逻辑。相比继承,装饰器模式具有动态扩展、灵活组合和非侵入性等优势,特别适合需要功能插拔和灵活扩展的场景。关键点包括保持接口一致性、避免修改原对象代码以及通过组合多个装饰器实现功能叠加。

luanzi____的博客 647

abaqus2matlab的安装与使用:如何用matlab提取abaqus的odb结果

官网abaqus2matlab官网地址matlab社区地址matlab社区地址在这里可以看到.m文件的源码论文:Abaqus2Matlab: A suitable tool for finite element post-processingabaqus2matlab可以处理.inp、.fil、.odb三种类型的文件。.inp文件:处理功能就在于只是单纯的输出inp文件,由于我自己写了自己的函数,不需要用到这个功能。

qianxin1234的博客 2019

开发者体验度量:构建DevEx评估体系的方法论与工具

在深入讨论度量方法前,我们需要明确什么是开发者体验(DevEx)。许多人将其简化为"开发工具好不好用",这是一个危险的误解。开发者体验是指开发者在完成工作过程中的整体感受和效率,它由三大核心维度组成:工具与基础设施:开发、测试、部署工具链的效能流程与协作:工作流程的顺畅度和团队协作的效率文化与成长:支持实验、学习和专业发展的环境这三个维度相互作用,共同决定了开发者能否高效且愉悦地完成工作。开发者体验不是一个目的地,而是一段持续的旅程。

2401_88760782的博客 1429

JS设计模式——装饰器模式

什么是装饰者模式? 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 实例 拿最近比较火的吃鸡游戏(绝地求生:大逃杀PUBG)来说,游戏中每个玩家降落到岛上,刚开始是一无所有的,需要通过捡拾或掠夺装备来武装自己,然后经过互相残酷的拼杀,获得游戏的胜利。 游戏过程中,我们可以把每一个玩...

userkang的博客 1913

基于Blender的AI插件——2D图片生成3D模型

只需5分钟即可从图片到可编辑3D模型,支持Blender全版本兼容。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2577

什么是装饰模式?JavaScript 实现一个装饰模式的示例

装饰模式(Decorator Pattern)是一种结构型设计模式,它允许动态地给一个对象添加额外的功能,而无需修改其原始结构。装饰模式通过 “包装” 目标对象(使用组合而非继承),在不改变对象自身的前提下,扩展其行为。用装饰器类包裹目标对象,在调用目标方法的前后添加新功能,且装饰器可以嵌套使用,实现多层功能扩展。

jialiang808的博客 416

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JavaScript设计模式-装饰模式

JavaScript设计模式-装饰模式概念例子ES6的装饰器总结github仓库地址:点击 [设计模式例子](https://github.com/fanhualuoye/design) 查看 概念 在程序开发中,许多时候都并不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就可以使用装饰者模式。装饰者模式可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象。 在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活,还会带来许多问题: 导致

lightning_fawn的博客 333

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

[设计模式][装饰模式][Javascript]

The Decorator Pattern is a design pattern that allows behavior to be added to an individual object, either statically or dynamically, without affecting the behavior of other objects from the same clas

186

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JavaScript设计模式 样例三 —— 装饰模式

装饰模式(Decorator Pattern): 定义:在不改变原对象的情况下,动态的给对象添加一些额外的职责。就功能而言,装饰模式相比生成子类更为灵活。 目的:把类的核心职责和装饰功能区分开。可以去除相关类中重复的逻辑。 场景:当系统需要扩展一个类的功能,或者客户端需要动态的给一个对象添加功能,并且使用继承或生成子类会很复杂的时候。 装饰模式体现了"多用组合,少用继承"这一设计...

weixin_30312563的博客 156

轻松了解JS中,闭包的基本使用和装饰模式的实现

文章目录思路梳理闭包的最基本演示通过闭包实现装饰模式闭包的总结小扩展 很多人学JS刚学到闭包的时候会比较懵,特别是从强类型语言(如Java)转而学JS的人,更是觉得这都啥跟啥呀。本文也就只针对这些刚学的新手,所以不会去谈闭包的原理,只谈闭包的基本使用,新手可以放心食用。只有在知道如何使用之后,你再深入了解就会得心应手,在用都不知道用的情况下就想对一个知识点了解的很透彻,这是不可能的。 了解闭包的使...

RudeCrab的博客 360

JavaScript 23 种设计模式之 9 装饰模式

在不改变对象结构的情况下,给对象增加一些额外的功能。

杏子 251

JS簡單的裝飾模式 給一個方法添加新的功能

//裝飾模式 function Test(){ console.log("test"); } Test();//執行 function Run() { console.log("run"); } var lasttest=window.Test; function TestRun() { lasttest(); Run(); } window.Test=window.TestRun; Te...

losedguest的博客 239

javascript设计模式-装饰模式

装饰模式:在不改变原类(对象)和继承的情况下动态扩展对象功能,通过包装一个对象来实现一个新的具有原对象相同接口的新的对象。在设计原则中,有一条,多用组合,少用继承,装饰模式正是这一原则的体现。 UML示意图: 假设自行车商店有4种自行车卖: var ABicycle = function(){ ... }; var BBicycle = function(){ ... }; va...

weixin_30553837的博客 100

js-面向对象-设计模式-装饰模式

装饰模式的哲学:不改变原来的类且不适用继承,把一个类的方法增强 1、装饰一个属性 function Student(){ } Student.prototype.study = function(){ console.log("语文"); console.log("数学"); console.log("英语"); console.log("理化生"); } //装饰类 function Zh

weixin_41040445的博客 129

js 中单例模式、工厂模式、装饰模式、发布订阅模式、适配器模式、

js中设计模式、设计模式、单例模式、工厂模式、装饰模式、发布订阅模式、适配器模式

qq_43631129的博客 417

利用策略模式与装饰模式扩展JavaScript表单验证功能

昨天为了练习策略模式和装饰模式 就写了一个表单验证的小例子 敲得过程中还是遇到了一些问题的 下面就给大家分享一下

尐轩web前端网络日志 2995

JS 装饰模式

函数添加执行前执行指定函数和执行后执行指定函数 使用时注意原函数的属性,防止丢失 Function.prototype.before = function( beforefn ){ var __self = this; // 保存原函数的引用 return function(){ // 返回包含了原函数和新函数的"代理"函数 beforefn.ap...

losedguest的博客 304

Fe3O4 HAADF-STEM模拟全流程:QSTEM与DrProbe参数配置实战

扫描透射电子显微镜(STEM)成像本质上是逐点扫描的散射强度地图,高角环形暗场(HAADF)探测器通过收集高角散射电子获得原子序数衬度。多片法作为模拟电子束与样品相互作用的经典算法,将样品沿入射方向切成薄片,交替进行实空间相位调制与频域自由传播,是QSTEM和DrProbe等模拟工具的核心。理解其物理原理,才能合理设置加速电压、球差系数、探测器内外角等关键参数,避免“参数都认识、组合全懵”的困境。在纳米材料表征中,借助模拟与实验对照可有效解析Fe3O4等复杂氧化物的原子柱位置与衬度机制。本文基于QSTEM与

weixin_34203832的博客 396
上一篇: javaScript异常处理
下一篇: JavaScript继承本地对象
五月西瓜
博客等级 码龄12年 4粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值