装饰器模式想必大家并不陌生:它允许向一个现有的对象添加新的功能,同时又不改变其结构,属于结构型模式,它是作为现有的类的一个包装。

这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
在 JS 中,装饰器(Decorator)是ES7中的一个新语法,它可以对类、方法、属性进行修饰,从而进行一些相关功能定制。它的写法与Java的注解(Annotation)非常相似,但是功能还是有很大区别。
代码示例:
不使用装饰器:
const log = (srcFun) => {
if(typeof(srcFun) !== 'function') {
throw new Error(`the param must be a function`);
}
return (...arguments) => {
console.info(`${srcFun.name} invoke with ${arguments.join(',')}`);
srcFun(...arguments);
}
}
const plus = (a, b) => a + b;
const logPlus = log(plus);
logPlus(1,2);
// plus invoke with 1,2
使用装饰器:
const log = (target, name, descriptor) => {
var oldValue = descriptor.value;
descriptor.value = function() {
console.log(`Calling ${name} with`, arguments);
return oldValue.apply(this, arguments);
};
return descriptor;
}
class Math {
@log // Decorator
plus(a, b) {
return a + b;
}
}
const math = new Math();
math.plus(1, 2);
// Calling plus with 1,2
从上面的代码可以看出,如果有的时候我们并不需要关心函数的内部实现,仅仅是想调用它的话,装饰器能够带来比较好的可读性,使用起来也是非常的方便。
// readonly 装饰器
import { readonly } from 'core-decorators';
class Fudao {
@readonly
title = 'A';
}
var fudao = new Fudao();
fudao.title = 'B'; // This will log error & doesn't work
JS中的装饰器本质也是一个函数,利用的是JS中object的descriptor;
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。
相关推荐:
ChatGPT:如果您正在使用VPN,这些技巧您一定要知道!,AI换脸*H
ChatGPT页面无法下拉?禁用浏览器扩展,轻松解决!,imba 1.6 ai
seo该从什么开始,seo是什么时候开始的 ,ai写作免费英文怎么说
seo软件工具,seo软件是什么 ,AI妆容
SEO站在未来之巅,助力网站在激烈竞争中脱颖而出,推荐网站优化欢迎咨询
SEO收费如何选择合适的SEO服务,提升网站排名并增加曝光度,做网站优化哪家实惠
SEO快排还有效果吗揭秘快速排名的真相与未来趋势,ai人像波普
SEO如何做?全方位解析提升网站排名的秘诀,AI翻译好处
ChatGPT:引领智能对话新潮流,助力未来科技,ai写作免费议论文
SEO注意事项:助力网站流量提升的关键策略,济宁快速seo优化价格
GPT版本全解:从基础到高级,如何选择最适合你的方案?,韩国ai人工智能
ChatGPT破解版:让人工智能助力你的工作与生活,ai cos帽
在线AI文章生成:内容创作新革命
文章AI思维导图自动生成助力创作的智慧之源
为什么“360收录”是你网站推广的必备利器,seo亚马逊
SEO怎么排名?这5大技巧,轻松提升网站排名,人人都可ai
怎样使用AI写文章:释放创作潜能,提升写作效率
ChatGPT显示“此网站无法加载站点”:背后原因与解决办法详解,用ai画明度渐变条
SEO有话:如何用精准优化助力企业在线增长,食品微信营销推广
seo网站排名关键词优化,seo网站关键词优化怎么做 ,ai回廊
OpenAI账号申诉怎么办?全方位解析解决方案,ai写作免费公众号下载
ChatGPT登录503错误?轻松解决,快速恢复畅享智能体验!,ai怎么加植物材质效果
如何查文章AI率?全面解析AI文章检测工具及技巧
ChatGPT4账号共享-让AI助力你的学习与工作,轻松提升效率,ai巨无霸
SEO网络营销:如何通过精准优化提升品牌价值,青州建设网站电话
自动写文章AI:高效创作工具,开启写作新纪元
SEO优化关键技巧:提升网站排名的实战攻略,科大讯飞ai论文写作软件
实用AI工具:提升效率、优化生活的科技利器
为什么选择老域名工具?提升网站SEO与品牌影响力的秘密武器,软文与seo文章区别
AI免费写文章:让创作变得轻松高效
ChatGPT崩了?用户称打开是一片空白,背后隐藏了什么?,ai 新技巧
360排名优化价格:打造高效网络营销的制胜法宝,ai换脸刘浩存自wei
ChatGPT5.0为什么一直没出来?背后的技术与战略,元宵节ai趣赏月
什么是seo平台seo教程,什么是 seoseo有何价值 ,论文写作ai助手公众号
AI助手Stut:智能时代的创新引擎,开启未来工作新篇章,ai对ai的格斗游戏
SEO永远,数字营销的核心力量,广州seo搜索栏内容
SEO合同:确保您网站优化成功的关键保障,微博营销推广规则最新
ChapGPT免费爬墙,轻松访问全球互联网资源!,蜜桃ai插画
SEO需要什么语音,seo需要考虑什么 ,学生作业ai
SEO优化如何为网站做好关键词研究和优化,ai直通
ChatGPT页面怎么拖不动?解决问题的终极指南,日韩AI换脸在线观看
用AI修改文章,提升写作效率与质量的新时代
SEO包月服务:助力企业提升网站排名与流量的长期利器,网站建设流程 报读文库
AI代谢文章:从灵感到成果的创作革命
SEO收集:如何通过有效数据收集提升网站排名,鞍山商城网站建设报价
ChatGPT:基于Transformer技术的语言模型,开创人工智能未来,AI独战OK
优化提长:让企业效能提升的秘密武器,长沙网站建设创意
为什么网站要做seo,网站做seo的目的是什么 ,ai初选
seo点击工具,seo排名点击软件推荐 ,ai狂躁
SEO实现:如何通过SEO优化提升网站流量与排名,南京市公司网站推广